我正在用C ++写一个RawFile
类(这里的语言并不重要)。但是,无论编译的CPU是什么,我都希望保持库完全通用。
现在,我有一个uint16_t swap16(uint16_t value)
函数交换两个字节并返回一个无符号整数和一个bool is_bigendian()
函数,如果系统是big-endian并且true
返回false
{1}}否则(我决定忽略PDP-11字节排序方案,因为它不太可能遇到)。最后,我有正在阅读的原始文件的字节序。
问题如下,鉴于文件和系统的字节序信息,我如何决定是否应用swap16()
函数?
目前,我决定使用以下测试:
return (file_is_big_endian || system_is_big_endian) ? swap16(value) : value;
我假设下表:
sytem\rawfile | little-endian | big-endian |
--------------------------------------------
little-endian | No swap16() | swap16() |
big-endian | swap16() | swap16() |
但是,我不确定这是否正确,我可能会遗漏一些东西。
欢迎任何好的解释(或更好的测试)!
答案 0 :(得分:0)
我回答我自己的问题......
事实上,我意识到我正在读取每个字节的文件字节(在“原始模式”下)。因此,系统本身是小端或大端的事实是无关紧要的。您只需要考虑您读取的文件类型以重新排序(或不重新)您正在阅读的字节集...所以,测试只是:
return (file_is_big_endian) ? swap16(value) : value;
可能只是一个愚蠢的问题......