【发布时间】:2015-01-15 15:44:37
【问题描述】:
我正在使用这个函数来写二进制文件:
ostream& write (const char* s, streamsize n);
我想知道当我的流大小 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 位整数。
【问题讨论】:
-
“有没有可能节省磁盘空间的方法?”不!如果您想节省磁盘空间,请使用不同的数字类型,例如
short. -
它将写入
new_number的二进制表示的两个低位字节。由于二进制表示是实现定义的,从技术上讲,结果是不可预测的。在典型的小端二进制补码机器上,它相当于int16_t temp = static_cast<int16_t>(new_number); out.write((char*) &temp, sizeof(temp)); -
对不起,我忘了说我要存储一个 24 位整数。但是这个没有数据类型
-
类似这样的事情:
uint32_t number = whatever(); unit8_t temp[3] = {static_cast<unit8_t>(number), static_cast<unit8_t>(number>>8), static_cast<unit8_t>(number>>16)}; out.write((char*)temp, sizeof(temp)); -
@Birdperson "我想存储一个 24 位整数"
uint32_t就可以了。