- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析 Solaris 移植到 linux 的大小字节序问题
市场部/林铮
一. 前言
随着 Linux 操作系统的逐渐普及,很多公司都在考虑如何将已
有的 Solaris 应用程序和开发环境移植到 Linux 上。本文对 C/C++
语言从 solaris(32bit)移植到 linux(32bit)环境上的过程中,可能
遇到的大小字节序的问题和解决方案进行说明。
当有2个字节以上的数值存入计算机内存或是文档的时候,又或
是进行数据转送的时候,我们要考虑先把哪个位置的字节存入内存地
址的高位?或是要先转送哪个位置的数据?像这样的次序考虑,就称
为endian或者是byte order(字节序)。
Little endian(小端):按照最低字节在地址最低位,最高字节
在地址最高位的顺序排列。
Big endian(大端):按照最高字节在地址最低位,最低字节在
地址最高位的顺序排列。
字节序是根据CPU的构造来来决定的。一般来说,Solaris 是大
端,而Linux则是小端。
比如,要将这个为032bit(4字节)的16进制常量,
其按照不同的字节序存入内存时,其排列如下:
Big endian(Solaris):
内容 12 34 56 78
地址 0 1 2 3
Little endian(Linux):
内容 78 56 34 12
地址 0 1 2 3
二. 大小字节序对移植的影响
字节序的移植性问题的话,只对short, int, long, float,
double, pointer等多字节的类型有影响,而对单字节(char 型等),
或是字符串是没有影响的。
例如:
int size;
char data[7];
把十进制数10,和字符串012345分别赋值到size和data,在字
1/4
节序不同的机器中,对size和data进行二进制转送,结果如下:
像这样的字节序的不同,当在字节序不同的机器(OS)间进行二进
制数据文档共享的时候,或是通过网络进行通信的时候,就会产生问
题。在多个机器(OS)间进行数据交互的时候,
要事先决定是否把数据类型统一成某种形式。
关于字节序,要考虑以下的事项:
(1) 磁盘中的数据文档共享
(2) 网络中的数据传送
(3) 共用体(C 语言)
(4) 进行了型变换的指针(C 语言)
(5) 无视型定义的数据访问 (C 语言 )
(1) 磁盘上的数据文档共享
在单系的处理系统众写入的多字节数值,从别的处理系统中读取
的时候,发生了字节序的问题。或者是Symfoware,Oracle等数据库,
文档中进行二进制处理的时候也会发生问题。
在大端机器上做成的文档,要在小端机器上去读取的话,就要考
虑进行字节序转换,或者是对文档本身进行字节序转换。
(2) 网络的数据传送
Linux常用的Intel系列的机器,host byte order指的就是little
endian(小端),而与此对应得就是网络中的network byte order指
的就是big endian(大端)。
2/4
Solaris的话,
文档评论(0)