中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
有关字节序的问题
作者:未知 时间:2005-09-13 19:23 出处:ChinaUnix.net 责编:chinaitpower
              摘要:有关字节序的问题

对于不同软件和硬件之间的差异,在技术人员看来除了叹息,不会有更多的情绪

,这样的现象是多种原因造成的,可是对于人为的差异,我总是痛恨不已,字节

序就是这样一个列子。
简单的说,字节序就是在处理数字时,机器和实际数字高低位顺序,也就

是:
数字:0x10 00 20  
little-endian机器:20 00 10 
big-endian   机器:10 00 20 
这样的差异是由 CPU 决定的,当前流行的 cpu 据我所知IBM的power-pc
是 big-endian  的,其他基本是 little-endian 的。
这样的差别导致在异种平台交换数据时可能发生问题,当然在异种平台间交换数据是

一个敏感的问题,有很多方法可用,这里不讨论。不过在编程时,也会有这样的

问题,看一下这种情况:
  [code:1:8c0a01ddec]*((short*)"AB") >> 8 [/code:1:8c0a01ddec]结果:
[code:1:8c0a01ddec]little-endian = 'B'
   big-endian = 'A'[/code:1:8c0a01ddec]这个语句可以用来判断机器字节序.
如果在字节序不同的平台间的交换数据必须进行转换,比如对于 int 类型:
big-endian 写入文件 
[code:1:8c0a01ddec]int i = 100;
write( fd, &i, sizeof(int) );[/code:1:8c0a01ddec]little-endian 读出后 
[code:1:8c0a01ddec]int i;
read( fd, &i, sizeof(int) );
char buf[sizeof(int)];
memcpy( buf, &i, sizeof(int) );
for( i = 0; i < sizeof(int); i ++ )
{
int v;
v = buf[sizeof(int) - i - 1];
buf[sizeof(int) - 1] =  buf[i];
buf[i] = v;
}
memcpy( &i, buf, sizeof(int) );[/code:1:8c0a01ddec]这仅仅是个列子,在异钟平台间直接传递二进制数据,即使不存在字节序的问题,也不是一个明智的方法,作

为可选的方式就是使用文本来交换数据,这样至少可以避免字节序的问题。

很多的加密算法为了追求速度,都会采取字符串和数字之间的转换,在计算完毕

后,必须注意字节序的问题,在某些实现中可以见到使用预编译的方式来完成,

这样很不方便,如果使用前面的语句来判断,就可以自动适应了。

 threehair 回复于:2003-07-26 08:45:16
字节序的问题影响的不仅仅是异种平台传递数据,还影响例如写一些特殊格式文件这类程序的可移植性。此时我觉得使用预编译的方式来完成就是一个
好办法。
从字节序的问题不妨引申到类型长度部移植问题。
我觉得以上应该都是关于编写异种平台程序应该注意的问题

 无双 回复于:2003-07-26 09:52:43
字节和类型长度的话开发时确实要想

在linux内核中使用的就是自己重定义一套新变量 使用typedef

如 u32_t  这就是32位长度的unsigned 

字节和类型长度的话要制定网络接口时要考虑 所以一般接口文档中都说明几个字节长度 每个类型是什么保存的如BSD 还是二进制等

 odin_free 回复于:2003-07-28 21:58:04
我记得永远的unix的论坛有一个10种不同平台下的c的问题的帖子
说得不错

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有