博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字节序—大端和小端
阅读量:545 次
发布时间:2019-03-09

本文共 1207 字,大约阅读时间需要 4 分钟。

1.字节序
        简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。也就是说,字节序通常只和你使用的处理器架构有关,而和编程语言无关,比如常见的Intel x86系列就是小端序。
2.大端(Big-Endian)
        数据高位字节排放在内存的低地址端,低位字节排放在内存的高地址端
3.小端(Little-Endian)
        数据低位字节排放在内存的低地址端,高位字节排放在内存的高地址端
4.举例
        假设一个32位 unsigned int型数据0x12 34 56 78,大小端8位存储方式如下:
        低地址 —————–> 高地址
        大端存储方式为0x12 34 56 78
        低地址 —————–> 高地址
        小端存储方式为0x78 56 34 12

        假设从内存地址0x4000开始存放,结果如下图所示。

        一个很好的记忆方法是,大端字节序是按照数据的书写顺序进行存储,而小端字节序是颠倒书写顺序进行存储。

5.常见CPU的字节序
        大端: PowerPC、IBM、Sun
        小端: x86、DEC

        ARM既可以工作在大端,也可以工作在小端。

        判断方法:

bool IsBigEndian()  {      int a = 0x1234;     //通过将int强制类型转换成char单字节,相当于取b等于a的低地址部分       char b =  *(char *)&a;      if( b == 0x12)      {          return true;      }      return false;  }

6.网络字节序
        所有的网络通讯协议都是使用大端字节序的编码。
        C/C++中有如下四个常用的转换函数,这四个函数在小端系统中生效,大端系统由于和网络字节序相同,所以无需转换。
        htons—把unsigned short类型从主机序转成网络字节序
        ntohs—把unsigned short类型从网络字节序转成主机序
        htonl—把unsigned long类型从主机序转成网络字节序
        ntohl—把unsigned long类型从网络字节序转成主机序

       使用以上函数需包含头文件:

#if defined(_LINUX) || defined(_DARWIN)#include 
#endif#ifdef WIN32#include
#endif

参考链接:http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html

参考链接:http://blog.csdn.net/ce123_zhouwei/article/details/6971544

你可能感兴趣的文章