when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.
《格列夫游记》 第一卷第4章 蒋剑锋(译)
我下面要告诉你的是,Lilliput 和 Blefuscu 这两大强国在过去 36 个月里一直在苦战。战争开始是由于以下的原因:我们大家都认为,吃鸡蛋前,原始的方法是打破鸡蛋较大的一端,可是当今皇帝的祖父小时候吃鸡蛋,一次按古法打鸡蛋时碰巧将一个手指弄破了。因此他的父亲,当时的皇帝,就下了一道敕令,命令全体臣民吃鸡蛋时打破鸡蛋较小的一端,违令者重罚。老百姓们对这项命令极其反感。历史告诉我们,由此曾经发生过 6 次叛乱,其中一个皇帝送了命,另一个丢了王位。这些叛乱大多都是由 Blefuscu 的国王大臣们煽动起来的。叛乱平息后,流亡的人总是逃到那个帝国去寻求避难。据估计,先后几次有 11000 人情愿受死也不肯去打破鸡蛋较小的一端。关于这一争端,曾出版过几百本大部著作,不过大端派的书一直是受禁的,法律也规定该派任何人不得做官。
字节(Byte)作为计算机存储的计量单位,存一个数字,可能要好几个字节,常见的如 c 的 int 类型,需要 4 个字节,字节多了,就不得不排排坐了,于是排排坐的顺序(字节序)就成了问题
假设现在有一个数字,0x10203040,假设内存地址是从左往右变大,那么把它存储下来就有两种方式:
0x10 0x20 0x30 0x40,顺着内存地址增长方向依次放置,内存地址越大,放置的数字越低位
大端序(Big Endian):高位字节存放到低位地址(高位字节在前)
大端序看起来和书写方向是一致的
0x40 0x30 0x20 0x10,跟内存地址增长的方向对着干,内存地址越大,放置的数字越高位
小端序(Little Endian):高位字节存放到高位地址(低位字节在前)
这儿说的还是在计算机自己,是个体,可以有个性,所以也叫主机字节序
但是大小端总不是那么好记忆,所以又有一种说法叫高尾端和低尾端,怎么理解呢?还是拿 0x10203040 举例,显然,它的尾巴是 40,高尾端就是把尾巴放在内存的高地址,低尾端是把尾巴放在内存的低地址
可是,社会是群体性的,当计算机插上网线,打开网络世界以后,就不能只说 “方言” 了,集体利益高于个体利益的时候就到来了,于是 TCP/IP 协议就在 RFC1700 中规定网络字节序使用 “大端” 字节序,从此计算机之间沟通有了 “普通话”
字节内的比特位不受这种影响,大于 1 个字节的数据类型才有字节序问题
比如一个字节 1000 0000(或表示为十六进制 80H),不管是什么顺序其内存中的表示都是这样,再比如 char a = ‘A’,a 只有一个字节的长度,a 也没有字节序的问题
大于 1 个字节的数据类型的字节顺序
网络字节序是 “所见即所得” 的顺序,是高尾端,而低尾端的字节顺序正好与此相反
比如 short B = 0102H(十六进制,每两位表示一个字节的宽度),所见到的是 0102 ,假设内存地址从左到右增加,在内存中这个 short B 的字节顺序是 01 02,可以通过抓包验证网络数据中 B 的字节流为 01 02
如果这表示两个单字节类型的变量,那么不需要考虑字节顺序的问题,如果这表示一个多个字节的变量,就需要考虑字节顺序问题
be yourself, everyone else is already taken.