Posted on 2008-07-30 14:48
Fox 阅读(2016)
评论(4) 编辑 收藏 引用 所属分类:
T技术碎语
一、Big-endian & Little-endian
还是Wikipedia好啊!可惜中文的国内看不了,愚昧啊!实在觉得中文有点难懂,看看日本语版本吧:D!
关于端(endianness)的介绍,Wikipedia上比较全了:http://en.wikipedia.org/wiki/Endianness
关于网络字节序(network byte order)和主机字节序(host byte order),说来挺无关紧要的一点东西,因为每次总是忘掉,所以每次都要好奇的看看大端(big-endian)和小端(little-endian)。
给定unsigned long
型整数十六进制形式:0x0A0B0C0D,其big-endian和little-endian形式分别为:
1) Big-endian
Memory
| ... | 8-bit atomic element size | ... | 16-bit atomic element size
| 0x0A | a | 0x0A0B | a
| 0x0B | a+1 | 0x0C0D | a+1
| 0x0C | a+2
| 0x0D | a+3
| ... |
2) Little-endian(X86)
Memory
| ... | 8-bit atomic element size | ... | 16-bit atomic element size
| 0x0D | a | 0x0C0D | a
| 0x0C | a+1 | 0x0A0B | a+1
| 0x0B | a+2
| 0x0A | a+3
| ... |
Mapping registers to memory locations (from Wikipedia)
为什么X86存储会使用little-endian,起初我想对于位运算,尤其是位移运算,little-endian很方便,但转念一想,big-endian也方便啊,无非是左移和右移的区别而已,但little-endian的优势在于unsigned char/short/int/long类型转换时,存储位置无需改变。
在网络传输中,采用big-endian序,对于0x0A0B0C0D,传输顺序就是0A 0B 0C 0D,因此big-endian作为network byte order,little-endian作为host byte order。
________________________________________________
PS:做鸡有什么不好?
上午跟某同事(为尊重虑,下文以Y称之)躲在犄角旮旯抽烟。以下为场景再现:
(忽然整出来一句)Y:听过鹰的故事没有?
(满脸疑惑)Fox:没有。
Y:一只小鹰掉到鸡窝里,#$@%……
F:我不是鹰,我就是一只鸡,做技术鸡有什么不好?
Y:做技术没有不好啊……
F:我不是说做技术,我说做鸡,我就是在地上走的,我为什么总是要抬头看天?
Y:你要往上看,没有人注定不能飞,XX以前也没有想过有一天会飞起来。
F:我不是掉到鸡窝里,我本来就在鸡窝里,我也喜欢呆在鸡窝里,别人都在地上走,我为什么要飞起来?
Y:你总要飞起来。
F:我说了我喜欢呆在鸡窝里,你见过有那只鸡飞起来了?
Y:……
F:我就是一只鸡,插了鸡翅还是飞不起来,况且,我对飞起来也没有任何兴趣。
Y:……
F:做鸡有什么不好?
Y:你看老毛,与人斗其乐无穷,他境界多高,与天斗其乐无穷,知道吧,他已经不屑与人斗了。
F:我不喜欢与人斗,我也斗不过,做鸡有什么不好?
Y:……