关于C语言的一些细节讨论

woaishuo2011 2013-04-24 05:51:28

#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平台下,在别的平台下运行会有什么问题么?)
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2013-04-25
  • 打赏
  • 举报
回复
实际效果上没有区别吧。
woaishuo2011 2013-04-25
  • 打赏
  • 举报
回复
大端小端确实是个问题,但是这两种写法都不能在大小端的机器上通用吧?除了这个,在代码可读性上或习惯上还有什么问题么?
LouisScola 2013-04-25
  • 打赏
  • 举报
回复
使用big-endian和little-endian的编译器分别编译了两种代码,汇编语言完全一样,看起来不存在差异。。 一般代码的习惯是第一种&0xff的吧,第二种方式还没看到过
碧水悠萝 2013-04-24
  • 打赏
  • 举报
回复
强制类型转换 的健壮性能高一点……,在其他系统平台中,强制类型转换出啥问题
Carl_CCC 2013-04-24
  • 打赏
  • 举报
回复
强制转换牵涉一个平台的大端小端问题。

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧