big_endian、little_endian问题在面试网络中经常出现,现在我们来复习一下
1、了解她
1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。
1981年10月,Danny Cohen的文章《论圣战以及对和平的祈祷》(On holy wars and a plea for peace)将这一对词语引入了计算机界。
这么看来,所谓大端和小端,是从描述鸡蛋的部位而引申到计算机地址的描述,也可以说,是从一个俚语衍化来的计算机术语。
在计算机里,对于地址的描述,很少用“大”和“小”来形容;对应地,用的更多的是“高”和“低”;很不幸地,这对术语直接按字面翻译过来就成了“大端”和“小端”,让人产生迷惑也不是很奇怪的事了。
2、理解她
在《程序设计实践》里,这对术语翻译“高尾端”和“低尾端”。这就好理解了:如果把一个数看成一个字符串,比如11223344看成”11223344”,末尾是个’\0’,’11’到’44’个占用一个存储单元,那么它的尾端很显然是44,前面的高还是低就表示尾端放在高地址还是低地址,它在内存中的放法非常直观,如下图(贴的):
那么当你再见到大端和小端这一对术语,就可以在脑中把它们转化成高尾端和低尾端,这时凭着之前的理解,甚至不用回忆,想着高低的字面含义就能回想起它们的含义。。
3、搞定她
记忆的方法1:
(数据看成字符串拿住最后的’\0’)大端——高尾端,小端——低尾端
记忆的方法1:
和常识思维一样,我们所知道顺序地址就是大端;反之小段。
4、“利用”她
大端:网络方面(ip报头etc.),ARM(芯片),(精简指令,功能强简单,功耗小)
小端:Inter,PC,(复杂指令,功能强大,功耗大)