怎么判断大小端呢?

如果一个变量的存储空间不止一个字节时,不同的系统可能会有不同的保存方式。

有的系统会把权重高的字节放在高地址,有的系统则会相反。

这种将多个字节的内容保存到一个变量里的不同方式就是字节序。

字节序,是指多字节的变量,使用哪一种顺序来存储每个字节。

先保存高位的字节,即big endian,也叫网络序。

先保存低位的字节,即little endian。

利用union来判断运行代码的系统是大端模式还是小端模式:

#include <stdio.h>

int main(int argc, char *argv[])
{
    union {long i; char ch;}c;
    c.i = 1;
    printf("%s", (c.ch) ? "little endian" : "big endian");
    return 0;
}

还有一种方式

/*endian macro: input a multi-byte parameter whose value is 1, output whether big-endian */
#define IF_BIG_ENDIAN(multi_bytes)    (multi_bytes>>1?TRUE:FALSE)

可以定义一个多字节的变量,变量的值定义为1。

将这个变量作为参数传递给这个宏后,就可以返回当前系统是否为大端模式。

原理是:大端系统的多字节保存方式会把1这个值保存在MSB,这样向右移位一个bit后,结果依然不为0.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yilonglucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值