首页 > 解决方案 > 在二进制文件中读取/写入控制字符

问题描述

我目前正在使用 C++ 处理二进制文件...

在某些时候,我读取了一个字节,读取的 char * 是“\x3”,这似乎是一个控制字符。

但是当我必须使用以下方法将其写回时:

const char *control = "\x3";
fout.write(control, sizeof(control));

然后我读回二进制文件,读取值为“\x11C”。

如何以正确的方式将控制字符数组写回文件?

标签: c++iobinary

解决方案


您的代码正在将 4-8 个字符写入二进制文件,而不是您期望的 1 个字符。control被视为普通指针,并且sizeof(control)正在解释所述指针而不考虑它指向的数据,并且返回值 4-8。

解决此问题的最佳方法是声明control为单个字符,这似乎是您的意图:

char control = '\x3';
fout.write(&control, sizeof(control));

另一种方式,如果你真的需要写多个字符,是这样的:

const std::string control = "\x3";
fout.write(control.data(), control.size());

任何一种方法都将正确输出您期望的字符数。


推荐阅读