原文地址:http://www.cnblogs.com/JeffreyZhao/archive/2010/02/10/1667341.html
说到程序间的通信,说到底便是发送数据流。我们一般把字节(byte)看作是数据的最小单位。当然,其实一个字节中还包含8个比特(bit)──有
时候我奇怪为什么很多朋友会不知道bit或是它和byte的关系。当我们拿到一系列byte的时候,它本身其实是没有意义的,有意义的只是“识别字节的方
式”。例如,同样4个字节的数据,我们可以把它看作是1个32位整数、2个Unicode、
或者字符4个ASCII字符。
同
样我们知道,在一个32位的CPU中“字长”为32个bit,也就是4个byte。在这样的CPU中,总是以4字节对齐的方式来读取或写入内存,那么同样
这4个字节的数据是以什么顺序保存在内存中的呢?例如,现在我们要向内存地址为a的地方写入数据0x0A0B0C0D,那么这4个字节分别落在哪个地址的
内存上呢?这就涉及到字节序的问题了。
每个数据都有所谓的“有效位(significant
byte)”,它的意思是“表示这个数据所用的字节”。例如一个32位整数,它的有效位就是4个字节。而对于0x0A0B0C0D来说,它的有效位从高到
低便是0A、0B、0C及0D——这里您可以把它作为一个256进制的数来看(相对于我们平时所用的10进制数)。
而所谓大字节序(big endian)
,便是指其“最高有效位(most significant byte)
”落在低地址上的存储方式。例如像地址a写入0x0A0B0C0D之后,在内存中的数据便是:
而对于小字节序(little endian)
来说就正好相反了,它把“最低有效位(least significant byte)
”放在低地址上。例如:
对于我们常用的CPU架构,如Intel,AMD的CPU使用的都是小字节序,而例如Mac OS以前所使用的Power
PC使用的便是大字节序(不过现在Mac
OS也使用Intel的CPU了)。此外,除了大字节序和小字节序之外,还有一种很少见的中字节序(middle
endian),它会以2143的方式来保存数据(相对于大字节序的1234及小字节序的4321)。
关于字节序的详细说明,您可以参考Wikipedia里的Endianness条目
。
- 大小: 19.5 KB
- 大小: 18.2 KB
分享到:
相关推荐
IP、主机字节序、网络字节序、互转 ------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using ...
image与字节数组byte的互转
对字节序的一些理解。
利用宏将网络字节序和主机字节序ip格式化输出为字符串ip
c#中string转换成字节byte的处理方法
项目中需要64位数的字节序转换,主机序转换成网路序或者相反转换,写了2个函数,有需要的可以参考。
本地字节序和网络字节序.pdf,如题,介绍网络字节序
字节序 大小端 网络编程 字节序 大小端 网络编程
float字节序高低位转换.txt
TIA博途_字节Byte转换成双字Dword全局FC库文件_GF_Byte_To_Dword
主要介绍了Java整型数与网络字节序byte[]数组转换关系,结合实例形式归纳整理了java整型数和网络字节序的byte[]之间转换的各种情况,需要的朋友可以参考下
大小端字节序的介绍和相互转换。在c++中,有4个函数可以实现主机字节序到网络字节序的相互转换。
Unity中Byte[]转Image,读取本地文件字节流,将其转换成图片
易语言字节集转换到字节型数组源码,字节集转换到字节型数组,字节集到字节型数组_
高字节序,低字节序讲解。高字节序,低字节序讲解。高字节序,低字节序讲解
android byte字节数组转换十六进制字符串一个demo。里面有几种转换测试代码。我的博客地址:http://blog.csdn.net/qq_16064871。
在计算机科学领域中,字节序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序。Endianness有时候也可以用指位序(bit)。 一般而言,字节序指示了一个UCS-2字符的...
Host byte order to network byte order.doc(主机字节顺序转换成网络字节顺序)
详细的字节序与位序描述,以及需要注意的问题。
STM8S的配置字节OPTION BYTE,描叙了STM8的选项字节的操作