Creative Commons License
本Blog采用 知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议 进行许可。 —— Fox <游戏人生>

游戏人生

游戏人生 != ( 人生 == 游戏 )
站点迁移至:http://www.yulefox.com。请订阅本博的朋友将RSS修改为http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

Big-endian记忆(附闲扯)

Posted on 2008-07-30 14:48 Fox 阅读(2000) 评论(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:……

Feedback

# re: Big-endian记忆(附闲扯)  回复  更多评论   

2008-07-30 16:01 by 杨大爷
最近KFC推出了一款“胜利之翼”你可以去试试

# re: Big-endian记忆(附闲扯)  回复  更多评论   

2008-07-31 08:40 by LOGOS
提问:
为啥网络传输要选择big-endian?

# re: Big-endian记忆(附闲扯)  回复  更多评论   

2008-07-31 10:09 by Fox
比如发送缓冲区中一段数据(一个整型数:0x0A0B0C0D),最合适的发送方式当是从低址到高址顺序发送,接受也将是顺序接收到0A,0B,0C,0D这样,big-endian正是这种顺序。

# re: Big-endian记忆(附闲扯)[未登录]  回复  更多评论   

2008-07-31 12:34 by YANG
最近可以访问了哈,不知道是不是因为OYH

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理