转自: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
二、大端序和小端序
大端序(英:big-endian)或称大尾序。
地址增长方向 → |
|||||
... |
0x0A |
0x0B |
0x0C |
0x0D |
... |
示例中,最高有效位(MSB, Most Significant Byte)是0x0A 存储在最低的内存地址处。下一个字节0x0B存在后面的地址处。正类似于十六进制字节从左到右的阅读顺序。
数据以16bit为单位:
地址增长方向 → |
|||||
... |
0x0A0B |
0x0C0D |
... |
|
|
最高的16bit单元0x0A0B存储在低位。
小端序(英:little-endian)或称小尾序。
地址增长方向 → |
|||||
... |
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 }
相关推荐
大端模式(Big-Endian)和小端模式(Little-Endian)是两种不同的字节序,它们决定了多字节数据(如整数、浮点数)在内存中的存储顺序。理解这两种模式对于编写跨平台的软件,特别是在网络通信和嵌入式系统设计中至...
大端模式和小端模式的区别在于如何安排数据的高位和低位字节在内存地址上的分布。 大端模式,也称为大端字节序,其特点是数据的最高有效位(MSB,Most Significant Bit)位于内存的最低地址。换句话说,数值的"更...
综上所述,大端模式和小端模式作为两种基本的字节序,它们在计算机系统中的应用十分广泛。了解并掌握这些基础知识对于编写高效且兼容性强的代码至关重要。无论是进行网络编程还是处理多媒体数据,合理选择并应用正确...
在处理不同系统或网络通信时,由于计算机架构的差异,数据的存储方式(即大端序和小端序)可能不同,这就需要进行数据类型的转换。下面将详细阐述相关知识点。 1. **数据类型**:在编程中,数据类型定义了变量可以...
该程序用于检测计算机处理器的字节序(大端序或小端序)。它通过创建一个无符号整数,然后将其地址转换为一个字符指针。如果第一个字节是0x12,则处理器为大端序;否则,处理器为小端序。
无论是ARM芯片中的大端序和小端序,还是串行通信中的MSB和LSB,这些概念都在不同程度上影响着数据的组织方式及其在不同系统之间的交互。理解和掌握这些基础知识,对于开发高效稳定的计算机系统至关重要。
字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小...short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端,long类型 小端转大端,long类型 大端转小端
### 大端和小端的区别 在计算机科学领域,大端(Big Endian)与小端(Little Endian)指的是多字节数据类型在内存中的存储顺序方式。这两种不同的存储方式直接影响了数据处理的效率以及跨平台数据交换的兼容性问题...
### iOS 大端格式和小端格式 #### 一、概念与原理 计算机系统中,对于多字节数据类型的处理存在两种不同的字节顺序:**大端格式**(Big-endian)与**小端格式**(Little-endian)。这两种格式的区别在于如何在内存...
关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或...它在大端法和小端法的系统内中,分别如图1所示的方式存放。 网络字节序 我们知道网络上的数据流是
在计算机科学中,大端序和小端序是指内存中多字节数据的存储方式。大端序(Big-Endian)指的是数据的高字节存储在内存低地址,而小端序(Little-Endian)则相反,低字节存储在低地址。实验通过创建一个简单的程序,...
这样的练习对于理解数据类型的存储结构,以及不同计算机架构(如大端序和小端序)的数据表示方式有着至关重要的意义。 例如,在习题2.40中,通过编写show_short、show_long和show_double函数来显示不同数据类型在...
理解大端和小端的区别,掌握字节序转换的方法,能够帮助开发者避免潜在的数据传输错误,确保数据在不同系统间的正确传递。无论是对于初学者还是有经验的程序员来说,深入学习字节序的相关知识都是非常有益的。
检测系统是使用大端模式还是小端模式 将系统字节序和网络字节序进行转换 使用C++代码实现 基于Visual Studio 2022
需要注意的是,不同的计算机架构可能有不同的字节顺序(比如大端序和小端序),这会影响浮点数如何在内存中存储和解析。因此,在进行跨平台数据交换时,需要考虑字节序问题,确保正确解读4字节数值。 总的来说,...
在计算机科学中,大端模式(Big-Endian)和小端模式(Little-Endian)是两种不同的字节存储顺序,主要应用于多字节数据类型如整数或浮点数的内存布局。这两种模式主要影响处理器如何在内存中存储数据的各个字节,...