c语言-union联合体

linux中联合体union实现判断Little endian 和 Big endian(大端和小端)

1、联合体的数据成员从低字节开始对齐
2、 Little endian 和 Big endian。
Little endian 和 Big endian 是 CPU 存放数据的两种不同顺序。对于整型、长整型等数据类型, Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节)。
假设一个数据为0x1234abcd,其地址为 0x0000 的四个字节变量,若字节序为 big-endian,则读的第一个字节0x00存放的数据为12;
若字节序位 little-endian,则读出结果为 cd。
一般来说, x86 系列 CPU 都是 little-endian 的字节序, PowerPC 通常是 Big endian,还有的 CPU 能通过跳线来设置 CPU 工作于 Little endian 还是 Big endian 模式.

linux中的实现源代码

static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.l)

如果 ENDIANNESS=’l’表示系统为 little endian,为’b’表示 little endian

在宏定义中取得是endian_test.l中的最低位,通过强制转换来实现,将其转换成char类型的数据,取得其四字节中的最低字节。
因为联合体的数据成员从低字节开始对齐,在输入联合体中的数据时从最低字节开始输入,即’I’在最低字节,'b’在最高字节,共四个字节,当读取endian_test.l时,其占用四个字节,强制转换读取endian_test.l的最低位数据,为I时表明它的最低位在最低字节,为d时表明它的最低位在最高字节,从而判断出CPU是little endian还是little endian

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值