Big_Endian和Little_Endian

unicode big endian

endian词源
endian”一词来源于 乔纳森·斯威夫特的小说 格列佛游记。小说中,小人国为水煮蛋该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开而争论,争论的双方分别被称为Big-endians和Little-endians。
1980年,Danny Cohen在其著名的论文" On Holy Wars and a Plea for Peace"中为平息一场关于 字节该以什么样的顺序传送的争论而引用了该词。
endian翻译为“字节序,又称 端序尾序。在 计算机科学领域中, 字节序是指存放多字节数据的 字节(byte)的顺序,典型的情况是整数在 内存中的存放方式和 网络传输的传输顺序。Endianness有时候也可以用指 位序(bit)。
一般而言, 字节序指示了一个UCS-2 字符的哪个字节存储在低地址。如果LSByte在MSByte的前面,即LSB为低地址,则该 字节序小端序;反之则是 大端。在 网络编程中, 字节序是一个必须被考虑的因素,因为不同的 处理器体系可能采用不同的字节序。在多平台的代码编程中, 字节序可能会导致难以察觉的 bug
BIG ENDIAN:最低位地址存放高位 字节,可称高位优先, 内存从最低地址开始按顺序存放(高数位数字先写)。最高位 字节放最前面。
LITTLE ENDIAN:最低位地址存放低位 字节,可称低位优先,内存从最低地址开始按顺序存放(低数位数字先写)。最低位字节放最前面。

1Big Endian解释编辑

最低位地址存放高位字节,可称高位优先,内存从最低地址开始按顺序存放(高数位数字先写)。最高位字节放最前面。
例如“汉”字的Unicode编码是6C49。如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian

2Big Endian示例图编辑

对于单一的 字节a byte),大部分 处理器以相同的顺序处理 位元(bit),因此单字节的存放方法和传输方式一般相同。
对于多 字节数据,如整数(32位机中一般占4字节),在不同的 处理器的存放方式主要有两种,以 内存中0x0A0B0C0D的存放方式为例,分别有以下几种方式:
注: 0x前缀代表十六进制。 
数据以8bit为单位:
地址增长方向 →
...
0x0A
0x0B
0x0C
0x0D
...
示例中, 最高有效位(MSB, Most Significant Byte)是0x0A 存储在最低的 内存地址处。下一个 字节0x0B存在后面的地址处。正类似于十六进制 字节从左到右的阅读顺序。
数据以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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值