如何以通用方式读取原始文件(little/bigh-endian)



我正在用C++编写一个RawFile类(这里的语言无关紧要)。但是,无论编译该库的CPU是什么,我都希望它完全通用。

目前,我有一个uint16_t swap16(uint16_t value)函数,它交换两个字节并返回一个无符号整数,还有一个bool is_bigendian()函数,如果系统处于big-endian,则返回true,否则返回false(我决定忽略PDP-11字节排序方案,因为它不太可能遇到)。最后,我得到了正在读取的原始文件的endianness。

问题如下,给定文件和系统的端序信息,我如何决定是否应用swap16()函数?

目前,我决定使用以下测试:

return (file_is_big_endian || system_is_big_endian) ? swap16(value) : value;

我假设下表:

sytemrawfile | little-endian | big-endian |
--------------------------------------------
little-endian |   No swap16() |  swap16()  |
   big-endian |    swap16()   |  swap16()  |

但是,我真的不确定这是否正确,我可能遗漏了一些东西。

欢迎任何好的解释(或更好的测试)!

我回答自己的问题。。。

事实上,我意识到我正在以字节为单位读取文件(在"原始模式"中)。因此,系统本身是小端序或大端序这一事实是无关紧要的。你只需要考虑你读取的文件的类型,就可以重新排序(或不排序)你正在读取的字节集。。。因此,测试很简单:

return (file_is_big_endian) ? swap16(value) : value;

可能只是个愚蠢的问题。。。

相关内容

  • 没有找到相关文章

最新更新