gpt4 book ai didi

c++ - 处理字节序和文件 C++ 的最常用方法

转载 作者:太空狗 更新时间:2023-10-29 23:39:09 25 4
gpt4 key购买 nike

我开始只是使用字符将 8 位整数读/写到文件中。不久我就意识到我需要能够处理的不仅仅是 256 个可能的值。我做了一些关于如何将 16 位整数读/写到文件的研究,并开始意识到 big 和 little endian 的概念。我做了更多的研究,发现了一些处理字节顺序的不同方法,我还学习了一些编写字节顺序无关代码的方法。我的总体结论是,我必须首先检查我使用的系统是使用大端还是小端,根据系统使用的类型更改字节序,然后处理这些值。

我未能找到的一件事是在 C++(无网络)中读取/写入文件时处理字节顺序的最佳/最常见方法。那么我应该怎么做呢?为了帮助澄清,我要求在大端系统和小端系统之间的文件中读取/写入 16/32 位整数的最佳方法。因为我关心不同系统之间的字节顺序,我也想要一个跨平台的解决方案。

最佳答案

最常见的方法是简单地通过 htons() 或 htonl() 传递内存中的值,然后再将它们写入文件,并在从中读回数据后通过 ntohs() 或 ntohl() 传递读取的数据文件。 (htons()/ntohs() 处理 16 位值,htonl()/ntohl() 处理 32 位值)

当为大端 CPU 编译时,这些函数是空操作(它们只是逐字返回您传递给它们的值),因此这些值将以大端格式写入文件。当为小端 CPU 编译时,这些函数端交换传入的值并返回交换后的版本,因此值将再次以大端格式写入文件。

这样,文件中的值始终以大端格式存储,并且在传输到内存或从内存传输时,它们始终会转换为/从适当的(CPU 原生)格式转换。这是最简单的方法(因为您不必编写或调试任何条件逻辑),也是最常见的方法(这些功能已在几乎所有平台上实现和可用)

关于c++ - 处理字节序和文件 C++ 的最常用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com