Я пытаюсь кодировать и декодировать кодировку Хаффмана на C++. Я не уверен, где моя проблема: я умею читать и писать, но когда я распаковываю файл, он скремблируется, поэтому я либо не кодирую, либо декодирую правильно. Я думаю, что когда я пишу и читаю файл, где все идет не так. Так вот что я должен написать закодированный файл. Сначала я хранить все bitcodes от моего неупорядоченный карты называется UMAP в одну строку:Чтение и запись по битам в C++ для кодировки Хаффмана
int i = 0, j = 0;
string fullStr = "";
for (i = 0; i < buffsize; i++) //put all codes in one string of 1's and 0's
fullStr += uMap[buffer[i]];
unsigned char byte = 0;
i = 0;
for (j = 0; j < fullStr.length(); j++)
{
if (i != 8)
{
byte |= (fullStr[j] == '1') << i; // make up one byte
i++;
}
else
{
outf.put(byte); // write one byte at a time
byte = 0;
i = 0;
}
}
if (i != 0 && i < 8)
{
while (i<8)
{
byte |= 0 << i; // finish up last byte if not finished
i++;
}
outf.put(byte);
}
Тогда на стороне распаковывать:
int i = 0;
unsigned char byte = 0;
bitset<8> setByte;
ofstream outf(filename, ofstream::binary);
string concat = "";
string bitStr = "";
for (i = 0; i < buffLength; i++)
{
setByte = buffer[i];
bitStr = setByte.to_string();
for (int j = 0; j < 8; j++)
{
concat += bitStr[j];
if (uMap[concat])
{
//cout << "found code " << concat << " " << uMap[concat] << endl;
outf.put(uMap[concat]);
concat = "";
}
}
}
outf.close();
Это яркий пример использования отладчика. Ручка и бумага могут помочь. Это выглядит слишком сложно для простого обзора кода. –