linux大端小端检查命令,Linux中判断大端小端

//=======================================

第一个方案

//---------------------------------------------------------

union

{

int a;

char b;

}EndianTest;

EndianTest.a = 0x00000001;

if( EndianTest.b == 0x01 )

//是小端

else

//是大端

这个方案能够理解,将EndianTest.a直接赋值为1

若是小端机器,那么存储在内存中的数据就是0x01000000

若是大端机器,那么存储在内存中的数据就是0x00000001

这样只要取该数据在内存中低位1个字节,就能够判断出本机是小端还是大端。

//======================================

第二个方案(网上说是linux中的实现)

//----------------------------------------------------------

static union

{

char c[4];

unsigned long l;

}endian_test = { { 'l','?','?','b' } };

#define ENDIANNESS ((char)endian_test.l)

endian_test 初始化的时候是按照char数组初始化的。

所以在内存中endian_test的布局是

高地址

^ b

| ?

| ?

| l

低地址

但是你取endian_test.l的时候,是按照long占的四个字节来取数据的

也就是如果是小端机器 取出来的是b??l

大端机器取出来的是l??b

然后再转换成char, 则去掉3个字节的高位

也就是小段是l 大端是b

完整的程序应该是:

static union

{

char c[4];

unsigned long l;

}endian_test = { { 'l','?','?','b' } };

#define ENDIANNESS ((char)endian_test.l)

if (ENDIANNESS == 'b')

{

printf("big\n");

}

else if(ENDIANNESS == 'l')

{

printf("little\n");

}

else

{

printf("error\n");

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值