[英]Huffman Coding: storing bytes and it's frequency reading it from a file, in C
我必須存儲字節(256種可能性)及其頻率,從文件中讀取字節並將其存儲在結構數組中。
它必須讀取簡單的文件,如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;
}
這段代碼無法正常工作,只是給我一個想法。
這取決於您如何在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);
請注意,數據以二進制形式存儲,因此不需要文本解析
您可以建立一個簡單的字節頻率表,如下所示:
unsigned freq[256] = {0}; /* indexed by byte values */
int ch;
while ((ch = fgetc(filep)) != EOF) {
++freq[ch];
}
循環完成后,freq [0]是字節0發生了多少次,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.