二进制文件大小超过预期的c ++

时间:2017-03-24 13:44:08

标签: c++ file

此代码创建大小为2338字节的文件

ofstream ofs("out", ios::binary);
ofs << htonl(1);
int size = sizeof(htonl(1));
for(int i = 0; i < 500; i++){
    ofs << htons((unsigned short)(sin(i/5)*1000));
    size += sizeof(htons((unsigned short)(sin(i/5)*1000)));
}
cout << "file size : " << size << endl;
ofs.close();

但是输出是“文件大小:1004”为什么文件大小实际上不是1004字节?

2 个答案:

答案 0 :(得分:5)

如果您在文本编辑器中打开文件,则可以快速查看错误。

数字以十进制表示形式打印,而不是作为内部(二进制)表示形式写入。

相反,请使用ostream::write

uint32_t foo = htonl(1);
ofs.write(reinterpret_cast<char*>(&foo), sizeof(foo));

答案 1 :(得分:0)

  

但输出为&#34;文件大小:1004&#34;为什么文件大小实际上不是1004字节?

因为std::ostream::operator<<()以文本格式输出数字,所以例如数字1需要1个字节,数字1000需要3个等等。sizeof()给出数据类型的大小(以字节为单位)。那些是不相关的数字,你不能指望它们匹配。

如果要编写二进制数据,请使用std::ostream::write() - 然后您的数字将匹配(但您无法通过文本编辑器读取该文件)。