写入二进制数据
我正在使用fstream写入二进制文件,并使用二进制标志打开文件时。写入二进制数据
我需要写一些文本为二进制文件,这是一个简单的写法诀窍。 问题是我还需要编写(如十六进制所示)0.在二进制记事本中打开时的值显示为零,但试图写入时该值不为零,它的值为十六进制值30。
如何编写这样的特定数据?
当您打开fstream时,使用ios::binary
标志来指定二进制输出。更多的信息可以在here找到。
至于写0,当你在十六进制看到30你正在写的字符“0”,而不是二进制数字0。要做到这一点与fstream的你可以这样做:
my_fstream << 0;
请记住二进制数据0没有文字表示,所以您将无法在记事本中读取它,就像您可以读取字符'0'一样。
你可能只需要这样的事情,提高您认为合适的:
ofstream file("output.bin", ios::out | ios::binary);
if (file.good())
{
char buf[1] = {0};
file.write(buf, sizeof(buf));
file.close();
}
链接到更先进的解决方案和文件已经发布。
谢谢你做到了。 请你解释一下写作之间的区别 char c =“0”; 和 char c = {0}; ? – 2009-09-10 07:30:32
NP。当你写一个“0”时,你正在写一个零字符的_string_,其值等于它的ASCII代码0x30h,这就是为什么当在记事本中打开时,你在十六进制查看器中将它看作一个零字符和0x30 。 {0}基本上等于用零填充一个数组,而你不再写0x30h,而是写一个真正的0x00h。你可以在这里找到差异的很好的解释:http://www.cplusplus.com/doc/tutorial/arrays/和这里:http://www.cplusplus.com/doc/tutorial/ntcs/ – Dmitry 2009-09-10 17:11:38
发布一些代码,如果你愿意,所以我们可以更好地了解你在做什么。 – 2009-09-09 17:36:51
你用写或 anno 2009-09-09 17:48:14
序列化是这个的常用术语。 – DanM 2009-09-09 17:53:57