2013-04-29 213 views
-1

我想将一系列0写入二进制文件。作为字符,这应该是一个空间,但是,当我写入我的文件时,我收到许多其他奇怪的字符。我不写零,但似乎是别的东西。将0写入二进制文件C++

我是否正确地做到了这一点?

代码:

int zero = 0; 
myfile.write(reinterpret_cast<char *>(&zero),1790*sizeof(char));  
+4

你真的应该得到一本关于C/C++的入门书,并研究它。你在这里有一个非常基本的问题。 – 2013-04-29 17:52:34

+1

首先,让你的故事笔直!你有大写字母O,然后你说它是一个字符(即字符),然后它是一个空格(这是ASCII 32)。 – 2013-04-29 17:52:48

+2

有几件事情是不对的,在这里:1.你不应该需要reinterpret_cast来解决这个问题。 2.你没有正确调用'write()'。 3.你似乎不清楚0,'O'和空格字符之间的区别。你需要更多地了解指针。但是你可以做到这一点 - 只需要学习一下( – jwd 2013-04-29 17:56:24

回答

6

像这样

for (int i = 0; i < 1790; ++i) 
{ 
    char zero = 0; 
    myfile.write(&zero, sizeof(char)); 
} 

您的代码写入1790个字节,但zero只有4个字节大,所以你最终写随机的垃圾。

另一种方式是

char zero[1790] = { 0 }; 
myfile.write(zero, sizeof zero); 

的一点是,当您使用write第一个参数的大小写必须至少一样大,第二个参数的值来写。

6

你正在写1790个字节的随机存储器的起始地址为&zero。该存储器的前4个字节将为零(值为zero,假设为sizeof(int)==4),其余的可能不是。

+2

从技术上讲,行为是未定义的(不是随机的,甚至什么都可以)。 – 2013-04-29 17:54:24

+2

它比“随机存储器”差得多。 – 2013-04-29 17:54:44