我一开始只是使用字符读取/写入 8 位整数到文件。不久之后,我意识到我需要能够处理的可能值不仅仅是 256 个。我对如何读取/写入 16 位整数到文件进行了一些研究,并了解了大端和小端的概念。我做了更多的研究,发现了一些不同的方法来处理字节序,并且我还学习了一些编写与字节序无关的代码的方法。我的总体结论是,我必须首先检查我使用的系统是否使用大尾数法或小尾数法,根据系统使用的类型更改尾数法,然后使用这些值。
我找不到的一件事是最好/最常见在 C++ 中读取/写入文件时处理字节顺序的方法(无网络)。那么我应该如何去做呢?为了帮助澄清,我询问在大端系统和小端系统之间读取/写入 16/32 位整数到文件的最佳方法。因为我担心不同系统之间的字节顺序,所以我也想要一个跨平台的解决方案。
最常见的方法是在将内存中的值写入文件之前通过 htons() 或 htonl() 传递它们,并在从文件读回读取的数据后通过 ntohs() 或 ntohl() 传递读取的数据。 (htons()/ntohs() 处理 16 位值,htonl()/ntohl() 处理 32 位值)
当针对大端 CPU 进行编译时,这些函数是无操作的(它们只是逐字返回您传递给它们的值),因此这些值将以大端格式写入文件。当针对小端 CPU 进行编译时,这些函数会交换传入值并返回交换后的版本,因此这些值将以大端格式写入文件。
这样,文件中的值始终以大端格式存储,并且在与内存之间传输时,它们始终会转换为适当的(CPU 原生)格式。这是最简单的方法(因为您不必编写或调试任何条件逻辑),也是最常见的方法(这些函数在几乎所有平台上实现并可用)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)