关于C语言的一些细节讨论
#define HEAD 0x1234
int main()
{
unsigned char uc_buff[4];
uc_buff[0] = (HEAD >> 8) & 0xFF;
uc_buff[1] = HEAD & 0xFF;
//or
//uc_buff[0] = (unsigned char)(HEAD >> 8);
//uc_buff[1] = (unsigned char)HEAD;
//...
return 0;
}
问题是上述写法中通过 &0xFF 和强制类型转换那个更符合规定?(上述代码运行在嵌入式linux平台下,在别的平台下运行会有什么问题么?)
Linux
C
嵌入式
------解决方案--------------------强制转换牵涉一个平台的大端小端问题。
------解决方案--------------------强制类型转换 的健壮性能高一点……,在其他系统平台中,强制类型转换出啥问题
------解决方案--------------------使用big-endian和little-endian的编译器分别编译了两种代码,汇编语言完全一样,看起来不存在差异。。
一般代码的习惯是第一种&0xff的吧,第二种方式还没看到过
------解决方案--------------------实际效果上没有区别吧。