关于C语言的一些细节讨论
来源: 互联网 发布时间:2017-04-08
本文导语: #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...
#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平台下,在别的平台下运行会有什么问题么?)
|
强制转换牵涉一个平台的大端小端问题。
|
强制类型转换 的健壮性能高一点……,在其他系统平台中,强制类型转换出啥问题
|
使用big-endian和little-endian的编译器分别编译了两种代码,汇编语言完全一样,看起来不存在差异。。
一般代码的习惯是第一种&0xff的吧,第二种方式还没看到过
一般代码的习惯是第一种&0xff的吧,第二种方式还没看到过
|
实际效果上没有区别吧。