我目前正在使用C ++处理二进制文件...
有时我读入一个字节,而char *读的是“ \ x3”,这似乎是控制字符。
但是当我必须使用
将其写回时const char *control = "\x3";
fout.write(control, sizeof(control));
然后我读回二进制文件,读取的值为“ \ x11C”。
如何正确地将控制字符数组写回文件?
答案 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(根据定义)。
此方法的一个优点是,在编译时就知道大小。无需搜索长度。