有可能用c++从二进制文件中读出位到位吗?

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

本文关键字:出位 c++ 二进制文件 有可能      更新时间:2023-10-16

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

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

问题是当在规格表上,我得到我需要读取大小为12的位串。从细节来看,很明显我应该为每个元素读取12位。但我不确定一点一点地阅读是否可行。其余的元素以字节为单位读取。而且,如果我每次读取2字节并使用位"掩码"只获得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);
    }