Bit shifting a byte by more than 8 bit

前端 未结 2 1185
灰色年华
灰色年华 2020-12-19 14:23

In here When converting from bytes buffer back to unsigned long int:

  unsigned long int anotherLongInt;

  anotherLongInt = ( (byteArray[0] << 24) 
           


        
2条回答
  •  攒了一身酷
    2020-12-19 14:59

    The unsigned char's are implicitly cast to int's when shifting. Not sure to what type exactly it is cast, I thing that depends on the platform and the compiler. To get what you intend, it is safer to explicitly cast the bytes, that also makes it more portable and the reader immediately sees what you intend to do:

    unsigned long int anotherLongInt;
    
    anotherLongInt = ( ((unsigned long)byteArray[0] << 24) 
                   + ((unsigned long)byteArray[1] << 16) 
                   + ((unsigned long)byteArray[2] << 8) 
                   + ((unsigned long)byteArray[3] ) );
    

提交回复
热议问题