在所示的位移示例中
here:
unsigned long int longInt = 1234567890;
unsigned char byteArray[4];
// convert from an unsigned long int to a 4-byte array
byteArray[0] = (int)((longInt >> 24) & 0xFF) ;
byteArray[1] = (int)((longInt >> 16) & 0xFF) ;
byteArray[2] = (int)((longInt >> 8) & 0XFF);
byteArray[3] = (int)((longInt & 0XFF));
三个问题:
>为什么它(int)而不是(unsigned char)?我用unsigned char尝试了它,似乎编译得很好.
>需要0XFF吗?是不是新位移入了0因为维基百科说C使用逻辑移位和0中的逻辑移位移位? (编辑:至少在>> 24上没有必要吗?)
>我不能只使用memcpy()将longInt复制到unsigned char缓冲区吗?是不是因为Endianness的问题?还有其他原因吗?
最佳答案 1.
((longInt>> 24)& 0xFF)表达式的类型为unsigned long int.使用强制转换为int,表达式首先转换为int,然后转换为unsigned char.如果不转换为int,则表达式不会首先转换为int.这两种情况没有区别,演员阵容是多余的.
2.
0xff不是必需的.转换为unsigned char实际上执行相同的操作.
3.
您可以使用memcpy,但它不可移植,因为它取决于系统的字节顺序.如果系统是大端或小端,它将给出不同的结果,而按位移位解将给出相同的结果.