【发布时间】:2016-12-11 16:35:55
【问题描述】:
假设我有一个包含 9 个整数的向量。
总共应该有 36 个字节。
其中一些整数适合short 的大小,所以我想将适合short 的整数存储在2 个字节中,将不适合的整数存储在4 个字节中。
我注意到带有120 98 99 99 98 257 259 98 0 的文件有 28 个字节,我想知道我做错了什么。
ofstream out(file, ios::binary);
int len = idx.size(); //idx is the vector<int>
string end = " 0", space = " "; //end is just to finish the saving.
for(int i = 0; i < len; i++) {
if(idx[i] <= SHRT_MAX){
short half = idx[i];
out<<half;
}
else out<<idx[i];
if(i == len-1) out<<end; else out<<space;
}
【问题讨论】:
-
strlen("120 98 99 99 98 257 259 98 0")是 28。 -
有些相关:
int不保证为 4 个字节,short不保证为 2 个字节。大多数编译器都使用这些大小,但标准并未强制执行。 -
您以后打算如何阅读该文件?我的意思是,你如何决定读什么 - int 或 short?
-
以
binary打开文件并不意味着输出将是二进制的。这只是意味着不会触及行尾。这必须是重复的。 -
@Daniel 将逻辑更改为什么?我在暗示的是,以这种方式存储的数据是不可能恢复的