【求教】二进制文件读取 大小端

suemiineo 2012-08-11 09:41:25
HI 大家好 近期想实现一个文件读写的功能 但是碰到了一个疑问无法解决 请高手指引

假设我要实现一个可以读写二进制文件的API 但是需要解决大小端差异

情况 1) 小端处理器读取小端文件(无需转换)

情况 2) 小端处理器读取大端文件(大端转小端)

情况 3) 大端处理器读取小端文件(小端转大端)

情况 4) 大端处理器读取大端文件(无需转换)

但问题是 我如何知道当前文件是用大端还是小端存储的呢 在ISO标准中有没有相应协议来解决这个问题

就我目前所知UCS字符编码中提供了BOM作为相关协议 但是二进制方面 是否也有相类似的协议可以使用

或者说 文件读取的大小端差异是由应用程序本身自行制定的(例如在应用程序的生成的文件加入相应标志位)

有忘有经验人士来澄清下 致谢!
...全文
417 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ies_sweet 2012-08-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

大小端一方面是机器决定的, 一方面是程序员可以控制的, 怎么写进入怎么读出来都是可控的.

如果想做个兼容性比较强的文件格式, 那么就是在每个文件头部打上编码类型与大小端说明.

比如:

"big-utf16"
"little-utf16"

你的输出API保证每个文件开头都写入一个NULL结尾的编码类型字符串.

你的读取API先找到第一个NULL结尾字符串,根据其编码……
[/Quote]

++
沭水河畔 2012-08-11
  • 打赏
  • 举报
回复
据我了解,二进制方面,没有办法。
可以参考Windows记事本的做法,就是你所说的BOM。
记事本至少支持4种文件格式:
ANSI、Unicode、大端Unicode以及UTF8。
qq120848369 2012-08-11
  • 打赏
  • 举报
回复
楼主这种疑惑, 让我看来就大小端不懂而已, 没其他原因.
qq120848369 2012-08-11
  • 打赏
  • 举报
回复
大小端一方面是机器决定的, 一方面是程序员可以控制的, 怎么写进入怎么读出来都是可控的.

如果想做个兼容性比较强的文件格式, 那么就是在每个文件头部打上编码类型与大小端说明.

比如:

"big-utf16"
"little-utf16"

你的输出API保证每个文件开头都写入一个NULL结尾的编码类型字符串.

你的读取API先找到第一个NULL结尾字符串,根据其编码类型与大小端说明,结合当前机器的大小端,就可以保证将数据按照本地可读的大小端次序存入变量.

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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