大端模式和小端模式

大端模式和小端模式

0x123456在内存中的存储方式

  • 大端模式

    低地址 -----> 高地址
    0x12 | 0x34 | 0x56 
  • 小端模式

    低地址 -----> 高地址
    0x56 | 0x34 | 0x12 

不难看出大端模式比较符合人的直观认识。

为什么会有大小端之分呢

  1. 一开始是由于不同架构的CPU处理多个字节数据的顺序不一样,比如x86的是小段模式,KEIL C51是大端模式。但是后来互联网流行,TCP/IP协议规定为大端模式,为了跨平台通信,还专门出了网络字节序和主机字节序之间的转换接口(ntohs、htons、ntohl、htonl)
  2. 大小端模式各有优势:小端模式强制转换类型时不需要调整字节内容,直接截取低字节即可;大端模式由于符号位为第一个字节,很方便判断正负。

判断机器的字节序

基本思想室根据数据截断来判断是大端还是小端

// 通过强制类型转换截断
BOOL IsBigEndian()
 {
  int a = 0x1234;
  char b = *(char*)&a;
  if(0x12 == b)
  {
      return TRUE;
  }
  
  return FALSE;
 }

// 利用联合体共享内存的特性,截取低地址部分
 BOOL IsBigEndian()
 {
  union NUM
  {
      int  a;
      char b;
  }num;
  
  num.a = 0x1234;
  
  if(0x12 == num.b)
  {
      return TRUE;
  }
  
  return FALSE;
 }

转载于:https://www.cnblogs.com/huluwa508/p/10827280.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值