ostream :: write - 当我的streamize小于我的char时会发生什么

时间:2015-01-15 15:44:38

标签: c++ file binary ostream

我正在使用此函数来编写二进制文件:

ostream& write (const char* s, streamsize n);

我想知道当我的streamize n 小于我的 s 时会发生什么。我原来的代码看起来像这样:

int new_number = 10;
out.write((char*) &new_number, sizeof (new_number));

你能预测当我把它改成时会发生什么:

int new_number = 10;
out.write((char*) &new_number, 2);

这是节省磁盘空间的可能方法吗? 对不起,我忘了提到我想存储24位整数。

1 个答案:

答案 0 :(得分:0)

这将写出int表示的前两个字节。这在某些情况下有效,但不可移植:

  • 如果机器的字节顺序不是 little-endian ,那么您将丢失该值;
  • 如果该值太大而无法用两个字节表示,那么您将得到错误的值;
  • 如果价值可能是负数,那么您需要小心如何阅读它;
  • 如果int小于两个字节,则无法节省空间。

转换为固定大小的类型(如int16_t,在必要时检查范围会更安全。