本帖最后由 yaboona 于 2016-4-10 16:58 编辑
提起大小端字节顺序,就头疼,始终一本糊涂帐,今天,特地抽出一些时间,扒一扒,字节顺序到底是从哪来,为什么要分字节顺序?
首先,想想人类的思维方式习惯于怎么样?思考。。。先看见的先读呗,如:
1234 ---这个数是“一千两百三十四”
那么机器思维的方式是什么呢?---低位就存在低地址。如:
读出来就是0x 0403 0201 -----简称“4321”吧
我们更换一种表现形式:
0000 0000: 0102 0304 ... ...
0000 0010: ... ...
我们习惯于怎么读呢? 0x0102 0304----简称“1234”吧? 我去,我去,我去。。。,不是4321吗??
这就是机器思维(小端模式)和人类思维(视在模式--又称大端模式)的不同!
网络传输是大小端模式的一个应用,它采用的是“人类思维方式”:也就是先看见的先传输。如“1234”,就是先发送1,再发2,再发3,再发4-----这很明显,这是人的思维方式。在网络底层,编程肯定是希望从低地址开始发送的---也就是采用机器思维,所以,两者结合,对于“1234”,在网络中的存储是这样的:
0000 0000: 0102 0304 ... ...
0000 0010: ... ...
也就是,高位在低字节-----大端方式----得出结论:网络字节顺序,是大端方式。
再次总结:
- 如果是按照人类的思维方式去传输、读取、应用数据,那么数据存储方式就要是“视在模式”,也就是大端模式。
- 大小端模式都是存储格式的概念,无所谓人性不人性;只有应用层面,才有“视在”,“人类思维”。我们说“大端存储模式”是“视在”模式的含义是:要想应用层是用人类思维方式去思考,那么,推导出,存储是要用大端模式的,所以称大端模式为“视在模式”。