如何简单判断大小端

  在平时的软件开发过程中,尤其是网络通信这方面,经常要考虑大小端的问题,所谓大小端简单的说,就是CPU的架构不同,导致多字节的数据

在内存中的存储结构不同,同样单字节的也需要考虑比特位的顺序问题。举个例子,比如一个int型的整数,占4个字节,那么在内存中是如何存储的呢

对于小端的CPU来说,是依照高字节的存储在低内存地址,低字节的存储在高内存地址上, 大端的情况正好是相反的。

以0x12345678为例,大端情况在内存中是这样存储的   |0x12 |0x34 |0x56 |0x78,内存地址由低到高

在网络通信时,定义的网络字节序则是按照大端那样存储的,所以有时候需要进行字节序的转换 常用的函数有ntohs, ntohl, htons, htonl等


回到正题来,那么我们怎么能简单判断出是大端还是小端,常用的方法就是通过共用体union的特性来作判断,可以参考linux里面的源码定义的宏

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

这样的话,我们就可以用这个宏来判断大小端

if ('l' == ENDIANNESS )/* 小端情况 */
{
    do something;
}
else
{
    do something;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值