日期:2014-05-16  浏览次数:20599 次

关于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的吧,第二种方式还没看到过
------解决方案--------------------
实际效果上没有区别吧。