字节序与字节对齐_第1页
字节序与字节对齐_第2页
字节序与字节对齐_第3页
字节序与字节对齐_第4页
字节序与字节对齐_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

小端(LittileEndian):0x00120x0134intmain(intargc,char**{intnum=unsignedchar*pc=(unsignedchar*)(&num);printf(“localorder:\n”);printf(“[0]:0x%Xaddr:%u\n”,pc[0],printf(“[1]:0x%Xaddr:%u\n”,pc[1],printf(“[2]:0x%Xaddr:%u\n”,pc[2],printf(“[3]:0x%Xaddr:%u\n”,pc[3],&pc[3]);num=htonl(num);printf(“htonlprintf(“[0]:0x%Xaddr:%u\n”,pc[0],printf(“[1]:0x%Xaddr:%u\n”,pc[1],printf(“[2]:0x%Xaddr:%u\n”,pc[2],printf(“[3]:0x%Xaddr:%u\n”,pc[3],&pc[3]);return0;}SPARClocal:0x12addr::0x34:0x560x78addr:htonlorder:addr:X86local:0x78addr::0x56:0x340x12addr:htonlorder:addr:字节序转化使用htons()还是使用htonl()?转换,4字节数据只能使用原因:例子:对于2个short数据0x1234和0x5678,0x000x010x020x03如果使用long0x1234节序后,任然为0x12340x000x0156小端0x020x0312小端所以2字节和4字节的转换不能混用。那么问题来了,8字节的double,字节,然后交换前后4#pragmapack(4)typedefstruct{chara;intvoid{AMunsignedchar*p=(unsignedchar*)(&a);inti=0;{}}1000htonl(*((int*)(&a)))==30198988==0x01CCCCCC在选项的StructMemberAlignment中修改,默认是8在编码时,可以这样动态修改:#pragma.注意:是pragma而不是unsignedinti=unsignedchar*p=NULL;unsignedshort*p1=NULL;p1=(unsignedshort//在有些CUP在x86上,类似的操作只会影响效率,但是在MIPS或者sparcerror,编译器的biglittle首先结构体中的3数据类型自身对齐:32位系统中char1,short2,int4,long4,float4,double8数据类型指定对齐:使用#pragmapack(x)指定的系统使用x字节对齐方式。#pragmapack(x)short:2和x中较小者,占2个字节以structA{inta;charb;shortc;chard;};结构体为例#pragma各成员所在内存地址及所占字节(该计算与结构体无关):int0:4;char4,1;short6:2,char8:1一共占了9(9/4+1)*4=12structA{inta;charb;shortc;chard;chare;charf;};所占的空间是一样的。structA{//#pragmapack(4)inta;//0:4charb;//4:1shortc;//6:2chard;//8:1inte;//12:4char最后占了17个字节,结构体所占空间是4的整数倍,故该结构体占20structA{//#pragmapack(2)inta;//0:4charb;//4:1shortc;//6:2chard;//8:1inte;//10:4char最后占了15个字节,结构体所占空间是2的整数倍,故该结构体占16structA{//#pragmapack(1)inta;//0:4charb;//4:1s

温馨提示

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

评论

0/150

提交评论