`
public0821
  • 浏览: 238055 次
  • 性别: 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是大端序,这个本人验证过)

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

分享到:
评论

相关推荐

    大端序和小端序

    "大端序和小端序" 大端序和小端序是计算机科学中的一种概念,用于描述多字节数据在内存中的存储顺序。这种顺序对于跨平台和网络程序非常重要,因为不同的平台和网络协议可能使用不同的字节序。 字节序可以分为两类...

    大端模式和小端模式的概念,区别以及优缺点

    大端模式(Big-Endian)和小端模式(Little-Endian)是两种不同的字节序,它们决定了多字节数据(如整数、浮点数)在内存中的存储顺序。理解这两种模式对于编写跨平台的软件,特别是在网络通信和嵌入式系统设计中至...

    关于大小端--大端 小端 大小端

    大端模式和小端模式的区别在于如何安排数据的高位和低位字节在内存地址上的分布。 大端模式,也称为大端字节序,其特点是数据的最高有效位(MSB,Most Significant Bit)位于内存的最低地址。换句话说,数值的"更...

    解析大端模式和小端模式

    综上所述,大端模式和小端模式作为两种基本的字节序,它们在计算机系统中的应用十分广泛。了解并掌握这些基础知识对于编写高效且兼容性强的代码至关重要。无论是进行网络编程还是处理多媒体数据,合理选择并应用正确...

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

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

    小端序与大端序的判断及

    该程序用于检测计算机处理器的字节序(大端序或小端序)。它通过创建一个无符号整数,然后将其地址转换为一个字符指针。如果第一个字节是0x12,则处理器为大端序;否则,处理器为小端序。

    大端和小端的区别,数据在内存里面存放的方式,源代码讲解

    ### 大端和小端的区别 在计算机科学领域,大端(Big Endian)与小端(Little Endian)指的是多字节数据类型在内存中的存储顺序方式。这两种不同的存储方式直接影响了数据处理的效率以及跨平台数据交换的兼容性问题...

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

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

    iOS 大端格式和小段格式

    ### iOS 大端格式和小端格式 #### 一、概念与原理 计算机系统中,对于多字节数据类型的处理存在两种不同的字节顺序:**大端格式**(Big-endian)与**小端格式**(Little-endian)。这两种格式的区别在于如何在内存...

    浅学字节序——字节序大小端,主机字节序,网络字节序的理解

    理解大端和小端的区别,掌握字节序转换的方法,能够帮助开发者避免潜在的数据传输错误,确保数据在不同系统间的正确传递。无论是对于初学者还是有经验的程序员来说,深入学习字节序的相关知识都是非常有益的。

    嵌入式系统/ARM技术中的解析大端模式和小端模式

    在计算机科学中,大端模式(Big-Endian)和小端模式(Little-Endian)是两种不同的字节存储顺序,主要应用于多字节数据类型如整数或浮点数的内存布局。这两种模式主要影响处理器如何在内存中存储数据的各个字节,...

    C++大端模式与小端模式判断

    检测系统是使用大端模式还是小端模式 将系统字节序和网络字节序进行转换 使用C++代码实现 基于Visual Studio 2022

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

    字节顺序分为大端字节序(Big-Endian)和小端字节序(Little-Endian),这两种字节序决定了多字节数值在内存中的排列方式。在TIA博途中,理解和掌握这些概念对于正确处理数据传输和程序设计至关重要。 首先,我们要...

    TIA博途-32位浮点数大小端存储-高低字节转换全局FB库文件(4种字节排列顺序)-V17版本.zip

    计算机内部是以二进制形式存储数据的,对于多字节的数据类型(如32位浮点数),其字节的排列顺序有两种方式:大端模式(Big-Endian)和小端模式(Little-Endian)。大端模式是指最高有效字节(也称为高字节或MSB,...

    数据类型转换程序,输入输出支持大小端序

    在处理不同系统或网络通信时,由于计算机架构的差异,数据的存储方式(即大端序和小端序)可能不同,这就需要进行数据类型的转换。下面将详细阐述相关知识点。 1. **数据类型**:在编程中,数据类型定义了变量可以...

    二进制文件大小端转换工具,

    这种顺序在不同的计算机架构中可能不同,分为大端模式(Big-Endian)和小端模式(Little-Endian)。大端模式下,高字节存储在内存地址较低的位置,而小端模式则相反,低字节在前。 标题中的“二进制文件大小端转换...

Global site tag (gtag.js) - Google Analytics