我是新来的,所以我会尽力清楚我的问题。我试图直接回答,但当我检查其他问题时,它们非常特别,我感到困惑。
我有一个二进制文件,我需要为我的项目阅读它。我还有一个规格表,我正在根据这些规格读取文件。所以我创建了一个cpp文件,并编写了一个简单的程序来读取每个元素。我使用ifstream和read()函数从文件中读取。
问题在于,在规格表上,我得到了我需要读取大小为12的位串。从细节来看,很明显我应该只读取每个元素的12位。但我不确定是否可以一点一点地阅读。其余元素以字节为单位读取。而且,如果我每次读取2个字节并使用位“掩码”仅获得12位,则此后读取的其余元素将无法正确匹配。所以我的猜测是我真的只需要读12位。
所以我的问题。是否可以从二进制文件中读取12位?还是一点一滴地阅读? 。我的意思是只有12,没有读取字节然后掩盖它们。
非常感谢。
答案 0 :(得分:4)
不,这是不可能的。
你应该做的是读取2个字节,屏蔽12位以获得所需的结果,但也将其他4位存储在某处。现在,当您再次需要12位时,只读取1个字节并将其与4个存储位组合。
答案 1 :(得分:0)
假设小端。
将文件读取到uint8_t
数组,填充为6个字节的倍数
制作您的访问功能
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);
}