Big-endian记忆(附闲扯)

一、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:……

你可能感兴趣的:(Big-endian记忆(附闲扯))