如果我有两个数字,比如4和2,我想要保存到一个文件中。两者都是int类型的,因此它们应该各占4个字节。
但是,这难道不是浪费空间吗,因为数字太小了,可以用2位和4位来表示吗?
有什么技术可以帮助您在相同的空间中打包更多的数字吗?
发布于 2015-03-31 14:05:29
使用位字段可以做到这一点,这将允许您创建更紧密打包的数据。例如:
typedef struct {
unsigned int first:3;
unsigned int second:3;
unsigned int third:3; //and so on
} PackedData;
...
PackedData a;
a.first = 4;
a.second = 2;这将创建一个具有三个3位数字的数据类型。您可以将其扩展到足以填充int的程度。
这方面的问题有两方面:
附加信息:
要将上述结构写入文件,只需将PackedData变量键入(无符号) int类型,然后将其保存到文件中。当您想要阅读它时,您以(未签名) int的形式进行读取,然后将类型转换回PackedData。
不过,有一点要注意的是,只有当系统保存和读取数据时都使用相同的功能时,这才能起作用。否则,数据将被逆转。
关于你问题的另一点,如果你有数字4,你至少需要3位来存储你的数据。
发布于 2015-03-31 14:04:19
发布于 2015-03-31 14:05:25
也许您可以尝试short?short只从内存中提取一个字节,而不是两个字节。
在您的程序中,您可以使用if来决定要写入文件的哪种形式。
if (aNumber > SHRT_MAX || aNumber < SHRT_MIN) write(aNumber);
else write((short)aNumber);希望这能帮上忙。
https://stackoverflow.com/questions/29370378
复制相似问题