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

Is it possible to read bit to bit from a binary file with c++?

我是新来的,所以我会尽量清楚地说明我的问题。我试图得到一个直接的答案,但当我检查其他问题时,它们非常特殊,我感到困惑。

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

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

所以我的问题。是否可以从二进制文件中读取 12 位?或阅读点点滴滴? .我的意思是只有 12 个,没有读取字节然后屏蔽它们。

非常感谢。

不,这不可能。

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

假设小端。

  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);
    }