一、什么是字节序
字节序(Byte Order)是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。其有两种存储方式:大端(Big-endian)和小端(Little-endian)。
二、端的起源
“endian” 这个词出自 Jonathan Swift 在1726 年写的讽刺小说《格列佛游记》(Gulliver’s Travels)。小人国的内战源于吃水煮鸡蛋时究竟是从大头(Big-endian)敲开还是从小头(Little-endian)敲开,由此曾发生过6次叛乱,其中一个皇帝送了命,另一个丢了王位。
三、如何理解
这里先来定义两个概念:
- MSB(Most Significant Bit/Byte):最重要的位或字节。它通常用来表明在一个 bit 序列(如一个 byte 是8个 bit 组成的一个序列)或一个 byte 序列(如一个汉字是两个 byte 组成的一个序列)中对整个序列取值影响最大的那个 bit/byte。(即最高位字节)
- LSB(Little Significant Bit/Byte):最不重要的位或字节。它通常用来表明在一个 bit 序列(如一个 byte 是8个 bit 组成的一个序列)或一个 byte 序列(如一个汉字是两个 byte 组成的一个序列)中对整个序列取值影响最小的那个 bit/byte。(即最低位字节)
比如一个十六进制的整数 0x12345678 里面:
0x12 | 0x34 | 0x56 | 0x78 |
---|
0x12 就是 MSB,0x78 就是 LSB。而对于 0x78 这个字节而言,它的二进制是 01111000,那么最左边那个 0 就是 MSB,最右边那个 0 就是 LSB。
大端 和 小端 区别:
- 大端(Big-endian):规定 MSB 在存储时放在低地址,在传输时放在流的开始;LSB 在存储时放在高地址,在传输时放在流的末尾。(即高位字节在前,低位字节在后。)
- 小端(Little-endian):规定 MSB 在存储时放在高地址,在传输时放在流的末尾;LSB 在存储时放在低地址,在传输时放在流的开始。(即低位字节在前,高位字节在后。)
例如: 0x12345678 在不同机器中的存储是不同的,如下所示。
大端(Big-endian) | 小端(Little-endian) | |
---|---|---|
0 字节 | 0x12 | 0x78 |
1 字节 | 0x34 | 0x56 |
2 字节 | 0x56 | 0x34 |
3 字节 | 0x78 | 0x12 |
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.