如果我有两个数字,让我们说4和2,我想保存到文件中。两者都是int
类型,因此它们每个应占用4个字节。
但这不是浪费空间,因为数字太小而且只能用2位和4位表示吗?
是否有任何技术可以帮助您在同一空间内打包更多数字?
答案 0 :(得分:3)
可以使用位字段来实现,这将允许您创建更紧凑的数据。 例如:
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变量强制转换为(unsigned)int类型,然后将其保存到文件中即可。如果要读取它,则将读取作为(unsigned)int,然后将类型转换回PackedData。
但请注意,这仅适用于保存和读取数据的系统都使用相同的字节顺序的情况。否则数据将被反转。
问题的另一点,如果您的号码为4,则至少需要3位来存储您的数据。
答案 1 :(得分:-2)
答案 2 :(得分:-3)
也许你可以试试short
? short
只从内存中取一个字节而不是两个字节。
在您的程序中,您可以使用if
来决定要写入文件的表单。
if (aNumber > SHRT_MAX || aNumber < SHRT_MIN) write(aNumber);
else write((short)aNumber);
希望这会有所帮助。