读书人

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

发布时间: 2012-08-27 21:21:56 作者: rapoo

【求教】二进制文件读取 大小端
HI 大家好 近期想实现一个文件读写的功能 但是碰到了一个疑问无法解决 请高手指引

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

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

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

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

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

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

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

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

有忘有经验人士来澄清下 致谢!

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

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

比如:

"big-utf16"
"little-utf16"

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

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

[解决办法]
据我了解,二进制方面,没有办法。
可以参考Windows记事本的做法,就是你所说的BOM。
记事本至少支持4种文件格式:
ANSI、Unicode、大端Unicode以及UTF8。

读书人网 >C语言

热点推荐