gpt4 book ai didi

c++ - 用 ofstream 写前导零

转载 作者:行者123 更新时间:2023-11-30 03:53:21 24 4
gpt4 key购买 nike

我正在编写一个程序,该程序将逐字节读取和写入指示文件内容的文件格式。这个程序的本质是前两个字节详细说明文件的那部分还剩下多少字节,后面跟着另外两个字节表明文件的这一部分实际代表什么。文件的长度会重复此模式。这意味着我必须写出由前面的零缓冲的确切数字,以便每个组件都是它需要的确切大小。我写了一个虚拟文件来说明我的观点:

#include <fstream>
#include <stdint.h>

int main() {
std::ofstream outputFile;
outputFile.open("test.txt",
std::ios::out | std::ios::ate | std::ios::binary);
const int16_t HEADER = 0x0002;
int16_t recordSize = 2*sizeof(int16_t);
int16_t version = 0x0258;
outputFile << recordSize << HEADER << version;
outputFile.close();
}

写入一个名为“test.txt”的文件,其十六进制内容为:

34 32 36 30 30

对于我们这些可以直接阅读十六进制的人来说,这意味着:

42600

如您所见,前面的零已被删除,我的记录不是我希望的那样。有没有一种方法可以使用 ofstream 来用零缓冲我的数字,就像我天真地尝试通过对所有我想要恰好两个字节长的写入使用 int16_t 来做的那样?是否有另一种可能在风格上更正确的方法来做到这一点?

最佳答案

operator<< 用于文本格式化。您可能想改用 .write()。

例如

outputFile.write(reinterpret_cast<char*>(&recordSize), sizeof(int16_t));
outputFile.write(reinterpret_cast<char*>(&HEADER), sizeof(int16_t));
// ...

关于c++ - 用 ofstream 写前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136638/

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