求解惑一个二进制文件在不同字节序设备中传输的问题

donhau 2012-03-09 09:04:37
两个系统一个在大端字节序,一端是小端字节序。
对于一些二进制文件的处理上,通用的文件传输协议如何解决字节序问题。

首先问一个问题,比如有种二进制文件,定义好文件结构为开头一个unsigned short length,然后跟着length个Assic字符。
如果一个文件内容是:lenth=1,后面A。
那么小端设备上的存储方式是不是为:01 00 'A'。而大端设备上的存储方式就应该为00 01 ‘A’。两个设备上各有自己系统下的应用软件可以解析该文件。

上述的理解是否正确?如果正确,那么下面的问题如何解决?

通用的文件传输协议,比如FTP、TFTP,并不认识上述的文件结构。文件在不同字节序的设备传递后,能正确的保证让对应的应用软件解析吗?
...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
donhau 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ckc 的回复:]
网络上传送时大家统一使用网络字节序,其实就是大端吧
其实你不需要记住这个,因为有一组函数用来在本地字节序和网络字节序之间转换
你在发送前转换一下,接收前也转换一下
这样就没问题了
[/Quote]

你说的这个有问题,转字节序的话,得是发收双方都知道传送的数据结构,而通用的FTP等软件二进制传输时,不知道数据结构,没办法进行转换。
举个例子,如果小端设备上有四个字节,0X 01020304,FTP不知道这是四个Char,还是2个SHORT,还是一个INT,如果是四个CHAR,那不需要转;如果是2个SHORT应该转成0X02010403;如果是一个4字节INT,应该转成0X04030201。
或者换句话说你没办法决定你要调用htons还是htonl。
所以2L的才是正解
ckc 2012-03-10
  • 打赏
  • 举报
回复
网络上传送时大家统一使用网络字节序,其实就是大端吧
其实你不需要记住这个,因为有一组函数用来在本地字节序和网络字节序之间转换
你在发送前转换一下,接收前也转换一下
这样就没问题了
昵称很不好取 2012-03-09
  • 打赏
  • 举报
回复
你的理解是对的,小端上低位存放低字节
在大小端上二进制文件可能会有问题,可以采用xml这样的面向文本的形式组织数据,或是用XDR数据结构传输标准来解决

4,357

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧