我们通常说数字5
可以表示为3
位二进制数。但是,如果我们将5
转换为其二进制表示,即101
并将其打印到文本文件中,它实际上需要3
字节,因为它被读作字符数组。如何创建文件(不一定是文本文件),使该文件的大小为3
位?
答案 0 :(得分:3)
您可以在逻辑上将5表示为三位,但文件系统和内存管理系统(对于RAM)都不会以小于一个字节的单位来寻址空间。
如果您有八个这样的数字,您可以将它们打包成24位= 3个字节,并将它们“有效”地存储在内存或文件中。引用效率很高,因为在节省一些空间的同时,使用打包数据变得很困难,因为您需要对事物进行大量移位。 CPU指令,内存加载,数组索引等都不适用于小于字节的单位。
最实用的方法是只使用一个字节用于三位,并承担开销。
答案 1 :(得分:1)
我认为你不会得到一个文件系统,告诉你文件是3位。它至少是一个字节,加上文件额外信息的存储空间。
但您可以简单地打开一个文件进行编写,并将3
写为二进制文件。
FILE *ptr;
ptr = fopen("file", "wb");
fwrite('a', 1, 1, ptr);
答案 2 :(得分:1)
您可以使用以下代码并根据此工作...以下代码在一个字节中存储三个数字(5,3和2)。为了存储3个数字,文件只占用一个字节。通常我们不能将数据存储在文件中的部分字节中。
#include<stdio.h>
struct bits
{
unsigned char first:3,second:3,third:2;
};
main()
{
struct bits b;
FILE *f;
b.first=5;
b.second=3;
b.third=2;
printf("\ninitial data:%u %u %u",b.first,b.second,b.third);
/*storing in file*/
f=fopen("bitsfile","w");
fwrite(&b,sizeof(b),1,f);
fclose(f);
/*reading back from file*/
f=fopen("bitsfile","r");
fread(&b,sizeof(b),1,f);
fclose(f);
printf("\ndata read from file:%u %u %u",b.first,b.second,b.third);
}
答案 3 :(得分:0)
由于二进制文件具有最小的“量子”,因此通常不能这样做。这是一个字节(8位)。 使用Huffman Encoding存储具有不均匀比特长度的符号是有趣的。只是在阅读完整文章之前解释一下:您的字母符号在二叉树叶子上保留每一个。从根开始并着陆到您的符号,有一条路径为1(即左)0(即右)。如果树是不平衡的(并且它将是),则可以用不同的比特长度唯一地表示不同的符号。当然需要付出一些努力,因为你必须始终在字节级读取文件,然后使用算法实现解包并处理这些位。