union 结构判断CPU存储数据是Big endian 还是 Litter endian

freeskyo 2008-09-28 03:37:05
各位好
我看到Linux 系统下判断CPU存储数据是Big endian 还是 Litter endian 的原代码如下:
static union
{
char c[4];
unsigned char l;
} endian_test={ {'l','?','?','b'} }
#define ENDIANNESS ( (char)endian_test.l )

听说如果返回 l 则表示是 Litter endian存储方式,如果返回 b, 则认为是big endian 存储方式。

请问如何使用这个宏,这个宏好像没有传参数! 如何测试呀! 谢谢!
...全文
318 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia_xiaoxin 2008-09-29
  • 打赏
  • 举报
回复
if (ENDIANNESS == 'l')
printf("little endian\n");
else if(ENDIANNESS == 'b')
printf("big endian\n");
else
printf("error\n");
MagiSu 2008-09-29
  • 打赏
  • 举报
回复
差不多就是这个意思。就是看他存储数据的顺序如何,就能判断了。如果l和'l'在一起就是little endian,反之就是big
sc_valentine21 2008-09-28
  • 打赏
  • 举报
回复
if (ENDIANNESS == 'l')
if (ENDIANNESS == 'b')
lin_style 2008-09-28
  • 打赏
  • 举报
回复
应该是相反的吧

little

内存
高-》低

晚上喝得有点多。。好象记错了。
帅得不敢出门 2008-09-28
  • 打赏
  • 举报
回复
up union的使用记得最深的就是这个判断
K行天下 2008-09-28
  • 打赏
  • 举报
回复

#include <stdio.h>
static union
{
char c[4];
unsigned char l;//c[4]和l共有一个四字节的内存空间
} endian_test={ {'l','?','?','b'} };
#define ENDIANNESS ( (char)endian_test.l )
int main()
{
if (ENDIANNESS == 'l')//低地址存低字节就是little endian
printf("little endian\n");
else
printf("big endian\n");
}

scklotz 2008-09-28
  • 打赏
  • 举报
回复
这个代码很巧妙、充分利用了C语法和编译器~
星羽 2008-09-28
  • 打赏
  • 举报
回复
if (ENDIANNESS == 'l')
if (ENDIANNESS == 'b')
xkyx_cn 2008-09-28
  • 打赏
  • 举报
回复

if (ENDIANNESS == 'l')
//little endian
else
//big endian
knightMickle 2008-09-28
  • 打赏
  • 举报
回复
直接判断啊:

if (ENDIANNESS == 1)
//big endian
else
//litter endian

64,677

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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