读写二进制文件中的控制字符

时间:2018-08-24 15:59:13

标签: c++ io binary

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

有时我读入一个字节,而char *读的是“ \ x3”,这似乎是控制字符。

但是当我必须使用

将其写回时
const char *control = "\x3";
fout.write(control, sizeof(control));

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

如何正确地将控制字符数组写回文件?

2 个答案:

答案 0 :(得分:0)

您的代码正在将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());

这两种方法都能正确输出所需的字符数。

答案 1 :(得分:0)

写字符串文字的另一种方法是将它们声明为数组:

static char const  data[] = "Hello World!\n";
fout.write(data, sizeof(data) - 1U);

- 1U使得终止NUL不会被写入。根据需要删除。

由于声明的data数组没有容量,因此编译器根据内容确定长度。

可以使用sizeof,因为字符的大小为1(根据定义)。

此方法的一个优点是,在编译时就知道大小。无需搜索长度。