是否可以使用c ++从二进制文件中逐位读取?

时间:2015-08-10 12:01:06

标签: c++ file bits

我是新来的,所以我会尽力清楚我的问题。我试图直接回答,但当我检查其他问题时,它们非常特别,我感到困惑。

我有一个二进制文件,我需要为我的项目阅读它。我还有一个规格表,我正在根据这些规格读取文件。所以我创建了一个cpp文件,并编写了一个简单的程序来读取每个元素。我使用ifstream和read()函数从文件中读取。

问题在于,在规格表上,我得到了我需要读取大小为12的位串。从细节来看,很明显我应该只读取每个元素的12位。但我不确定是否可以一点一点地阅读。其余元素以字节为单位读取。而且,如果我每次读取2个字节并使用位“掩码”仅获得12位,则此后读取的其余元素将无法正确匹配。所以我的猜测是我真的只需要读12位。

所以我的问题。是否可以从二进制文件中读取12位?还是一点一滴地阅读? 。我的意思是只有12,没有读取字节然后掩盖它们。

非常感谢。

2 个答案:

答案 0 :(得分:4)

不,这是不可能的。

你应该做的是读取2个字节,屏蔽12位以获得所需的结果,但也将其他4位存储在某处。现在,当您再次需要12位时,只读取1个字节并将其与4个存储位组合。

答案 1 :(得分:0)

假设小端。

  1. 将文件读取到uint8_t数组,填充为6个字节的倍数

  2. 制作您的访问功能

    uint16_t get12Bits(uint8_t *ptr, int loc)
    {
        uint64_t temp;// use lower 48 bits
        memcpy(&temp, ptr+(loc&~0x03), 6*uint8_t);//6bytes, 4 elements
        return 0xfff&(temp>>(loc&0x03)*12);
    }