`
chriszeng87
  • 浏览: 717937 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

大端序和小端序

 
阅读更多

转自:http://www.cnblogs.com/flysnail/archive/2011/10/25/2223721.html

 

一、概述

字节序,又称端序尾序,英文:Endianness

在计算机科学领域中,字节序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序。Endianness有时候也可以用指位序(bit)。

大小端序跟硬件的体系结构有关,所有x86系列的pc机都是小端序,跟操作系统无关。在x86系列的pc上的solaris系统是小端序,sun sparc平台的solaris是大端序。

大端字节序,高字节存于内存低地址,低字节存于内存高地址;小端字节序反之。

如一个long型数据0x12345678
大端字节序:
内存低地址--> 0x12
                    0x34
         0x56
内存高地址--> 0x78

小端字节序:
内存低地址--> 0x78      
       0x56
       0x34
内存高地址--> 0x12



  1. 二、大端序和小端序

 

大端序(英:big-endian)或称大尾序

Big-Endian.svg
数据以8bit为单位:

地址增长方向  →

...

0x0A

0x0B

0x0C

0x0D

...

示例中,最高有效位(MSB, Most Significant Byte)是0x0A 存储在最低的内存地址处。下一个字节0x0B存在后面的地址处。正类似于十六进制字节从左到右的阅读顺序。

数据以16bit为单位:

地址增长方向  →

...

0x0A0B

0x0C0D

...

 

 

最高的16bit单元0x0A0B存储在低位。

小端序(英:little-endian)或称小尾序。

Little-Endian.svg
数据以8bit为单位:

 

地址增长方向  →

...

0x0D

0x0C

0x0B

0x0A

...

最低有效位(LSB,Least Significant Byte)是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。

数据以16bit为单位:

地址增长方向  →

...

0x0C0D

0x0A0B

...

 

 

最低的16bit单元0x0C0D存储在低位。

采用大端序的CPU和采用小端序的CPU不仅在字节上是相反的,在比特位上也是相反的。
比如0x01在内存中的存储
大端序:内存低比特位 00000001 内存高比特位
小端序:内存低比特位 10000000 内存高比特位

比如0x00000001
大端序:内存低比特位 00000000 00000000 00000000 00000001 内存高比特位
小端序:内存低比特位 10000000 00000000 00000000 00000000 内存高比特位

三、判定方法

typedef struct tagRegion{
    unsigned char region1:1;
    unsigned char region2:6;
    unsigned char region3:1;
} REGION;
 
union {
 REGION bb;
 unsigned char aa;
} cc;
 
int main(int argc, char* argv[])
{
    cc.bb.region1 =1;
   printf("Hello World! %d/n",cc.aa);   //打印1表示小端,打印128表示大端。
   return 0;
}

  

static unsigned char isBigEndian()
{
        const unsigned short test= 0xFF00;
        return *((unsigned char *) &test);
};

  使用以下方式更简洁一些:

复制代码
 1 #include <iostream>
2 using namespace std;
3
4 int main(int argc, char **argv)
5 {
6 short s = 0x0102;
7 if((*(unsigned char*)&s) == 2)
8 cout<<"little endian"<<endl;
9 else if((*(unsigned char*)&s) == 1)
10 cout<<"big endian"<<endl;
11 else
12 cout<<"unknown endian\n"<<endl;
13
14 return 0;
15 }
复制代码
分享到:
评论

相关推荐

    基于大端法、小端法以及网络字节序的深入理解

    关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或...它在大端法和小端法的系统内中,分别如图1所示的方式存放。   网络字节序 我们知道网络上的数据流是

    字节序转换辅助类,字节大端小端转换

    字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小...short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端,long类型 小端转大端,long类型 大端转小端

    大小端转换(C++)

    提供一个大小端转换的类,可以转换short int float double类型,提供一个大小端转换的类,可以转换short int float double类型,提供一个大小端转换的类,可以转换short int float double类型

    用联合的方法判断大小端

    利用联合的方法,判断X86平台是小端序存储还是大端序存储

    判断主机字节序大小端

    判断主机到底是大端还是小端的c程序!利用位置判断

    浮点数、Double与字节数组互转,C/C++函数

    包含浮点数4字节、double 8字节与字节数组互转,有大端序和小端序各自对应的C/C++函数。在VS2013下正常编译,项目完整。几个函数用C/C++语言写成,便于移植,可以放心使用。

    lsgwr#linux-c-cpp#03_大小端序1

    2.2 存储空间的高地址字节 与 低地址字节 2.3 大端序存储和小端序存储 2.4 测试计算机的大小端序 2.5 通信中的大小端序

    如何提取大端存储(Big-Endian)二进制文件中的数据,并输出到txt中

    如何提取大端存储(Big-Endian)二进制文件中的数据,并输出到txt中。matlab实现

    字节存储顺序: little-endian小端,big-endian大端 教程

    你是否遇到过,内存中的数据顺序颠倒 你存入1234,实际存储的是3412. 字节存储顺序: little-endian小端,big-endian大端 教程 主机序,网络序 hton,ntoh

    字节序、MSB、LSB.docx

    如果LSByte在MSByte的前面,即LSB为低地址,则该字节序是小端序;反之则是大端序。在网络编程中,字节序是一个必须被考虑的因素,因为不同的处理器体系可能采用不同的字节序。在多平台的代码编程中,字节序可能会...

    TIA博途-32位浮点数大小端存储-高低字节转换的具体方法示例(4种字节排列顺序).docx

    TIA博途-32位浮点数大小端存储-高低字节转换的具体方法示例(4种字节排列顺序)

    c++和python如何实现主机字节序和网络字节序的相互转换

     主机字节序是自己的主机内部,内存中数据的处理方式,要么是大端,要么是小端,取决于处理器类型和操作系统类型,和编程语言无关,如何判断主机的主机字节序是大端还是小端,请参见网络编程:主机字节序和网络...

    RapidJSON压缩包

    它支持 UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON 可以在分析一个 UTF-8 文件至 DOM 时,把当中的 JSON 字符串转码至 UTF-16;RapidJSON 对内存友好。在大...

    rapidjson-zh

    它支持 UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些 编码的检测、校验及转码。例如,RapidJSON 可以在分析一个 UTF-8 文件至 DOM 时,把当中的 JSON 字符串转码至 UTF-16。它也支持代理对(surrogate pair)...

    高效的 RapidJSON 解析/生成器支持库,提供 SAX 及 DOM 操作

    它支持 UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON 可以在分析一个 UTF-8 文件至 DOM 时,把当中的 JSON 字符串转码至 UTF-16。它也支持代理对(surrogate ...

    json_zly.rar

    它支持 UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON 可以在分析一个 UTF-8 文件至 DOM 时,把当中的 JSON 字符串转码至 UTF-16。它也支持代理对(surrogate ...

    节序问题:解析大小的端判定

    一、大小端概念要判断电脑的大小端,肯定先要理解大小端的概念:大端模式(Big-Endian),是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,即高低高低;小端模式(Little-Endian),是...

Global site tag (gtag.js) - Google Analytics