我需要编写一个Huffman算法。关于问题的整体思路我已经清晰,但是文件处理方面还有些困惑。
问题在于:该算法需要压缩任何类型的文件。
我的解决方案是:将文件读取为字节数组,然后使用int array[256]={0}
为每个字节获取其相应的int n
值并递增array[n]
。如果我表达不清楚,请让我知道。
因此,我进行了大量研究,但不理解如何获取和处理任何类型的文件字节。
我需要编写一个Huffman算法。关于问题的整体思路我已经清晰,但是文件处理方面还有些困惑。
问题在于:该算法需要压缩任何类型的文件。
我的解决方案是:将文件读取为字节数组,然后使用int array[256]={0}
为每个字节获取其相应的int n
值并递增array[n]
。如果我表达不清楚,请让我知道。
因此,我进行了大量研究,但不理解如何获取和处理任何类型的文件字节。
FILE *fileptr;
char *buffer;
long filelen;
fileptr = fopen("myfile.txt", "rb"); // Open the file in binary mode
fseek(fileptr, 0, SEEK_END); // Jump to the end of the file
filelen = ftell(fileptr); // Get the current byte offset in the file
rewind(fileptr); // Jump back to the beginning of the file
buffer = (char *)malloc(filelen * sizeof(char)); // Enough memory for the file
fread(buffer, filelen, 1, fileptr); // Read in the entire file
fclose(fileptr); // Close the file
现在你有一个包含文件内容的字节数组。
尝试一下二进制文件IO怎么样:
FILE *f=fopen("example.bin","rb");
char c;
//loop for each byte to the end
{
size_t fread(&c, (size_t)1, (size_t) 1, f);
array[c]++;
}
或者类似的东西!!
byte[]
中,而这个答案被标记为不好,但没有任何评论,那么我什么也没学到。 - IAbstract
char array[]
中。然后,使用普通的fopen()
/fread()
有什么问题,防止它打开任何类型的文件?最后,请尝试并报告其中的问题。 - Sigi