字节序大小端详解从高低地址和高低位开始理解转_第1页
字节序大小端详解从高低地址和高低位开始理解转_第2页
字节序大小端详解从高低地址和高低位开始理解转_第3页
字节序大小端详解从高低地址和高低位开始理解转_第4页
字节序大小端详解从高低地址和高低位开始理解转_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、字节序(大小端)详解从高低地址和高低位开始理解(转)一、字节序定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian。引用标准的Big-Endian和Little-Endian的定义如下:a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b) Big-Endian就是

2、高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。c)网络字节序:4个字节的32bit值以下面的次序传输:首先是07bit,其次815bit,然后1623bit,最后是2431bito这种传输次序称作大端字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。比如,以太网头部中2字节的“以太网帧类型”,表示后面数据的类型。对于ARP请求或应答的以太网帧类型来说,在网络传输时,发送的顺序是0x08,0x06。在内存中的映象如下图所示:栈底(高地址)0x06-低位0x08-高位栈顶(低地址)该字段的值为0x0806。按照大端方式存放在内存中。

3、二、高/低地址与高低字节首先我们要知道我们C程序映像中内存的空间布局情况:在C专家编程中或者Unix环境高级编程中有关于内存空间布局情况的说明,大致如下图:最高内存地址0xffffffff|栈底.栈.栈顶|/NULL(空洞)/|未初始化的数据(统称数据段)初始化的数据正文段(代码段)最低内存地址0x00000000以上图为例如果我们在栈上分配一个unsignedcharbuf4,那么这个数组变量在栈上是如何布局的呢注1?看下图:栈底(高地址)buf3buf2buf1buf0栈顶(低地址)现在我们弄清了高低地址,接着来弄清高/低字节,如果我们有一个32位无符号整型0x12345678(呵呵,恰好

4、是把上面的那4个字节buf看成一个整型),那么高位是什么,低位又是什么呢?其实很简单。在十进制中我们都说靠左边的是高位,靠右边的是低位,在其他进制也是如此。就拿0x12345678来说,从高位到低位的字节依次是0x12、0x34、0x56和0x78。高低地址和高低字节都弄清了。我们再来回顾一下Big-Endian和Little-Endian的定义,并用图示说明两种字节序:以unsignedintvalue=0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsignedcharbuf4来表示value:Big-Endian:低地址存放高位,如下图:栈底(高地址)buf3(

5、0x78)-低位buf2(0x56)buf1(0x34)buf0(0x12)-高位栈顶(低地址)Little-Endian:低地址存放低位,如下图:栈底(高地址)buf3(0x12)-高位buf2(0x34)buf1(0x56)buf0(0x78)-彳氐位栈顶(低地址)在现有的平台上Intel的X86采用的是Little-Endian,而像Sun的SPARC采用的就是Big-Endian。三、例子嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址存放内容0x40010x120x40000x34而在Big-endian模式CPU内存中的存放方式则为:内存地址存放内容0x40010x340x40000x1232bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址存放内容0x40030x120x40020x340x40

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论