我正在使用霍夫曼编码制作文件压缩器。我想以二进制格式(1和0)读取文件,无论文件格式如何。可能吗?如果是,怎么办?
答案 0 :(得分:0)
首先,请确保以二进制模式读取文件。 (在某些操作系统(例如MS Windows)下,以文本模式读取会损坏碰巧看起来像换行符的所有字节。)
第二,您需要决定按什么顺序读取每个字节中的位:首先是最低有效位(LSB),还是最高有效位(MSB)。只要您保持一致,选择哪个顺序都没关系(当然,您必须按照希望读取的顺序写入这些位!)
最后,您将需要使用按位运算符来访问各个位。一个示例(采用部分C ++类的形式):
class bit_buffer {
public:
bit_buffer(std::istream *input): m_input(input) {}
bool get_bit() {
if (m_bit_idx < 0) {
m_input->get(m_char);
m_bit_idx = 7;
}
bool retval = (m_char >> m_bit_idx) & 0x01;
-- m_bit_idx;
return retval;
}
private:
std::istream *m_input;
unsigned char m_char;
int m_bit_idx = -1;
}
请注意,以上代码首先读取了最高有效位(MSB)。