我必须存储字节(256种可能性)及其频率,从文件中读取并将其存储在struct数组中。
它必须读取简单的文件,如txt, png, mp3和pdf。我知道霍夫曼编码理论,但我有问题,以获得频率表。我希望你能给我一些C语言方面的建议。
交货。:读取文件后,我得到三个字节:0000 1111,1111 0000,1111 0000
Bytes Frequency
0000 1111 1
1111 0000 2
这是我到目前为止得到的:
#define NUM_BYTES 256
typedef struct Node{
unsigned int frequency;
char* symbol;
} Node;
GetByteFrequency( char* fileName, Node* table){
FILE* filep = fopen( fileName, "r" );
fread(&table, 1, sizeof(char), filep);
fclose(filep);
}
int main(){
Node frequencyTable[NUM_BYTES-1];
GetByteFrequency("text.txt", frequencyTable);
return 0;
}
这段代码没有按照它的方式工作,它只是给我一个想法,我在做
您可以像这样构建一个简单的字节频率表:
unsigned freq[256] = {0}; /* indexed by byte values */
int ch;
while ((ch = fgetc(filep)) != EOF) {
++freq[ch];
}
循环完成后,freq[0]是字节0出现的次数,等等
这取决于你如何在text.txt中存储你的表。
我的建议是一次读/写整个数组,这将节省你解析文件的一些问题。
例如
char freqTable[NUM_BYTES];
FILE* filep = fopen("data.bin", "wb");
fwrite(freqTable, sizeof(char), NUM_BYTES, filep);
然后直接读取数组
FILE* filep = fopen("data.bin", "rb");
fread(freqTable, sizeof(char), NUM_BYTES, filep);
请注意,数据是以二进制形式存储的,因此不需要进行文本解析