写入二进制数据

问题描述:

我正在使用fstream写入二进制文件,并使用二进制标志打开文件时。写入二进制数据

我需要写一些文本为二进制文件,这是一个简单的写法诀窍。 问题是我还需要编写(如十六进制所示)0.在二进制记事本中打开时的值显示为零,但试图写入时该值不为零,它的值为十六进制值30。

如何编写这样的特定数据?

+0

发布一些代码,如果你愿意,所以我们可以更好地了解你在做什么。 – 2009-09-09 17:36:51

+0

你用写或 anno 2009-09-09 17:48:14

+0

序列化是这个的常用术语。 – DanM 2009-09-09 17:53:57

当您打开fstream时,使用ios::binary标志来指定二进制输出。更多的信息可以在here找到。

至于写0,当你在十六进制看到30你正在写的字符“0”,而不是二进制数字0。要做到这一点与fstream的你可以这样做:

my_fstream << 0; 

请记住二进制数据0没有文字表示,所以您将无法在记事本中读取它,就像您可以读取字符'0'一样。

+0

他已经这么做了。 – 2009-09-09 17:35:54

+0

是的,文字不好,但链接很好。 – gimpf 2009-09-09 17:39:19

+1

您可能的意思是:my_fstream sbk 2009-09-09 18:58:35

你可能只需要这样的事情,提高您认为合适的:

ofstream file("output.bin", ios::out | ios::binary); 
if (file.good()) 
{ 
    char buf[1] = {0}; 
    file.write(buf, sizeof(buf)); 
    file.close(); 
} 

链接到更先进的解决方案和文件已经发布。

+0

谢谢你做到了。 请你解释一下写作之间的区别 char c =“0”; 和 char c = {0}; ? – 2009-09-10 07:30:32

+0

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