`
public0821
  • 浏览: 236000 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

大端序和小端序的差别

阅读更多

代码如下:

 

#include <iostream>
using namespace std;

typedef struct
{
    unsigned char a1: 1;
    unsigned char a2: 1;
    unsigned char a3: 1;
    unsigned char a4: 1;
    unsigned char a5: 1;
    unsigned char a6: 1;
    unsigned char a7: 1;
    unsigned char a8: 1;
}Data;

int main(int argc, char** argv)
{
    unsigned char a = 0xab;//10101011
    Data *test = (Data*)&a;
    cout<<(unsigned int)test->a1<<(unsigned int)test->a2;
    cout<<(unsigned int)test->a3<<(unsigned int)test->a4;
    cout<<(unsigned int)test->a5<<(unsigned int)test->a6;
    cout<<(unsigned int)test->a7<<(unsigned int)test->a8<<endl;

    unsigned short data=0X8284;
    unsigned char *p = (unsigned char*)&data;

    if(*p == 0X82)
    {
        cout<<"big endian order"<<endl;
    }
    else if(*p == 0x84)
    {
        cout<<"little endian order"<<endl;
    }
    return 0;
}

 
环境:
bash-2.05$ uname -a
SunOS test 5.9 Generic_112233-12 sun4u sparc SUNW,Ultra-80
输出结果:
10101011
big endian order

环境:
test@develop:~$ uname -a
Linux develop 2.6.35-24-generic #42-Ubuntu SMP Thu Dec 2 02:41:37 UTC 2010 x86_64 GNU/Linux
输出结果:
11010101
little endian orde

结论:
大端序:低地址存放高位,不管是在字节之间还是字节内部,内存中存放数据的位置跟我们头脑中以及教科书上的顺序是一致的,比如数字0X1234,在内存中存放的序列是:0001 0010 0011 0100
小端序:地地址存放低位,顺序刚好跟大端序相反,比如数字0X1234,在内存中存放的序列是:0010 1100 0100 1000

大小端序跟硬件的体系结构有关,所有x86系列的pc机都是小端序,跟操作系统无关(网上都这么说,可是无法验证,但在x86系列的pc上的solaris系统是小端序,sun sparc平台的solaris是大端序,这个本人验证过)

补充:
我们经常用移位操作,但从来没感受到大小端序对我们程序代码的影响,个人认为是操作系统或者编译器底层实现移位操作的时候屏蔽掉了这些细节,也就是说大端序和小端序平台的移位操作在实现上应该是不一样的,但给我们使用者的感受是一样的

分享到:
评论

相关推荐

    大端序和小端序

    其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。

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

    关于字节序(大端法、小端法)的定义《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程序!利用位置判断

    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 对内存友好。在大...

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

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

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

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

    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 ...

Global site tag (gtag.js) - Google Analytics