读取每种文件格式为0和1

时间:2018-07-07 11:38:29

标签: compression

我正在使用霍夫曼编码制作文件压缩器。我想以二进制格式(1和0)读取文件,无论文件格式如何。可能吗?如果是,怎么办?

1 个答案:

答案 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)。