此代码创建大小为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字节?
答案 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()
- 然后您的数字将匹配(但您无法通过文本编辑器读取该文件)。