endian翻译为“字节序”,又称
端序,
尾序。在
计算机科学领域中,
字节序是指存放多字节数据的
字节(byte)的顺序,典型的情况是整数在
内存中的存放方式和
网络传输的传输顺序。Endianness有时候也可以用指
位序(bit)。
一般而言,
字节序指示了一个UCS-2
字符的哪个字节存储在低地址。如果LSByte在MSByte的前面,即LSB为低地址,则该
字节序是
小端序;反之则是
大端序。在
网络编程中,
字节序是一个必须被考虑的因素,因为不同的
处理器体系可能采用不同的字节序。在多平台的代码编程中,
字节序可能会导致难以察觉的
bug。
LITTLE ENDIAN:最低位地址存放低位
字节,可称低位优先,内存从最低地址开始按顺序存放(低数位数字先写)。最低位字节放最前面。
2Big Endian解释编辑
最低位地址存放高位字节,可称高位优先,内存从最低地址开始按顺序存放(高数位数字先写)。最高位字节放最前面。
例如“汉”字的Unicode编码是6C49。如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian
3Big Endian示例图编辑
注: 0x前缀代表十六进制。
数据以8bit为单位:
|
地址增长方向 →
| |||||
|
...
|
0x0A
|
0x0B
|
0x0C
|
0x0D
|
...
|
数据以16bit为单位:
|
地址增长方向 →
| |||
|
...
|
0x0A0B
|
0x0C0D
|
...
|
最高的16bit单元0x0A0B存储在低位。
测试大端小端的C代码:
#include<stdio.h>
int main()
{
unsigned int uiTest;
unsigned char *pucTmp = NULL;
uiTest = 0x12345678;
pucTmp = (unsigned char *)&uiTest; //指向&uiTest的第一个字节
if(*pucTmp == 0x78)
{
printf("This is Little Endian\n");
}
else
{
printf("This is Big Endian\n");
}
return 0;
}
本文详细介绍了计算机科学领域的字节序概念,包括大端序和小端序的区别,并通过实例展示了不同字节序下数据的存储方式。此外还提供了一段用于测试系统字节序的C代码。
6189

被折叠的 条评论
为什么被折叠?



