浅析正确的字节序是什么

有线或无线通信基于信息流。当数据在通道上串行传输时,就会出现一个问题:多字节传输中正确的字节顺序是什么?有两种选择:从多字节数据的小端(右端,最低有效位)开始,称为小尾数;另一种是从大端(左端,最高位)依次传输,称为大端。

这两个名词最早起源于乔纳森·斯威夫特的小说《《格列弗游记》》,因为从小端或者BigEnd打蛋,导致利立浦特国(小人国)和不来夫斯库国发生战争。利立浦特自古就靠吃鸡蛋来打破大局。现任皇帝的祖父曾经在吃鸡蛋的时候不小心弄断了手指,所以他命令所有臣民在吃鸡蛋之前把小端掰断。打碎大段蛋的人被激怒,小端派与大段派发生战争,夫斯库国支持大段派,收留大段派重任,双方爆发了一场血战。

在计算机和通讯领域,关于小尾数和大端的选择,也出现了一场旷日持久的争论。小尾数的创始人是RS和TELEX,号称小端先发,支持小尾数的知名处理器有:x86、Z80、MCS-48、、VAX、PDP-11、DECAlpha等.而支持大端的有:摩托罗拉、IBMPOWER、System/、PDP-10等,他们的口号是“我们宁愿战斗,也不愿改变”。结果小尾数和大端同时并存,在它们之间交流时需要翻译。好在现在有一些处理器架构可以在软件或硬件中设置小尾数和大端切换,称为“双端”。该特性可以简化程序或网络设备的处理逻辑,提高性能。当正在处理的数据是单字节且彼此不相关时,不需要考虑字节序问题。但是很多高级语言都有各种数据类型,例如:C、C++、Pascal、Basic等,有短整型、整型、长整型、浮点数等等,而这些数字都是多字节的。当正在处理的数据由多个字节表示时会遇到不兼容,计算机制造商生产的计算机以不同的方式存储由多个字节表示的数值。

计算机的字节顺序与CPU有关。不同的硬件平台有不同的CPU结构。内存中的字节序也有两种不同的表示方式:小尾数字节序和大端字节序。小尾数的最低有效字节在前,即存放在内存的低地址,如Intel80x86、DECVAX、SunSparc处理器。Big-endian最高有效字节存储在最低内存地址,如摩托罗拉、IBM处理器。主机上使用的字节序称为主机字节序。即使相同的数字在尾数不同的机器上以不同的格式存储。




转载请注明:http://www.aierlanlan.com/rzdk/6361.html