有可能用c++从二进制文件中读出位到位吗?
Is it possible to read bit to bit from a binary file with c++?
我是新来的,所以我会尽量把我的问题说清楚。我试图得到一个直接的答案,但当我检查其他问题时,它们非常具体,我很困惑。
我有一个二进制文件,我需要为我的项目读取它。我也有一份规格表,我正在根据这些规格阅读文件。因此,我创建了一个cpp文件,并编写了一个简单的程序来读取每个元素。我使用ifstream和read()函数从文件中读取。
问题是当在规格表上,我得到我需要读取大小为12的位串。从细节来看,很明显我应该为每个元素读取12位。但我不确定一点一点地阅读是否可行。其余的元素以字节为单位读取。而且,如果我每次读取2字节并使用位"掩码"只获得12位,则在此之后读取的其余元素不正确匹配。所以我猜我真的只需要读取12位。
我的问题是。有可能从二进制文件中读取12位吗?还是读一点一点的书?. 我的意思是只有12个字节,没有读取字节,然后屏蔽它们。
不,这是不可能的
你应该做的是读取2字节,掩码12位以获得你想要的结果,但也将其他4位存储在某个地方。现在,当您再次需要12位时,只需读取1个字节并将其与4个存储位合并。
假设小端序
-
将文件读取到
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); }
相关文章:
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- 位集上的按位或给出错误的答案
- 是否可以使用 Wojciech Mula 算法将 __m256i 个 32 位字而不是 4 个 64 位字存储为弹出计数和结果?
- 如何找出在两个整数的乘积中设置了多少位(等于 1)
- 在 int 数组中打印出位
- 如何在不丢失第一位数字的情况下打印出双精度值
- 按位不操作如何给出负值
- 获取设置故障位的流位置 / std::ios::抛出故障
- 硬件支持的 Boost 库中动态位集的弹出计数
- ICONV(1)INCONV(3)给出不同的转换-Ubuntu 16.04 64位
- 位的总和被给出找到塔尔数
- BitBlt从剪贴板复制位图会给出错误的颜色
- 给定一个uint8_t,找出设置了多少位
- 如何在编译时找出std::位集的大小
- 在64位打开的suse Linux上构建32exe给出链接错误
- c++位操作如何打印出16、32位
- Quazip在Mac 10.9, Qt 5.4和clang(64位)上抛出错误
- 位移位数字给出错误的输出' std::cout '
- 当从64位转换为32位时,Gcc不会给出任何警告
- C++ 打印出矢量<无符号字符的位集>