3.5.1 来历
很直观地可以知道,在Modbus寄存器中对于一个由两个字节组成的16位整数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(LITTLE-ENDIAN)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(BIG-ENDIAN)字节序。Modbus通信协议中具体规定了字节高低位的发送顺序,这样自然就引出了字节序和大小端的问题。
另外,或许你曾经仔细了解过什么是大端、小端,也动手编码并测试手头上的机器上是大端还是小端的程序,甚至还编写了大端、小端转换程序;但过了一段时间之后,再看到大端和小端这两个词,脑中很快浮起了自己曾经做过的工作,却总是想不起究竟哪种是大端,哪种是小端,然后又去查找以前写的记录。更让人不快的是,这种经历反反复复,让你十分困扰。
在理解这对概念之前,先看看大端和小端这两个令人迷惑的术语究竟是如何产生的?
实际上,大端和小端可以追溯到1726年Jonathan Swift所著的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。1981年10月,Danny Cohen的文章《论圣战以及对和平的祈祷》(On holy wars and a plea for peace)将这一对词语引入了计算机界。这么看来,所谓大端和小端,也就是big-endian和little-endian,其实是从描述鸡蛋的部位而引申到对计算机地址的描述。也可以说,它们是从一个俚语衍化来的计算机术语。稍有些英语常识的人都会知道,如果单靠字面意思来理解俚语,那是很难猜到它的正确含义的。在计算机里,对于地址的描述,很少用“大”和“小”来形容;对应地,用的更多的是“高”和“低”;很不幸,这对术语直接按字面翻译过来就成了“大端”和“小端”,让人产生迷惑也不是很奇怪的事了。