【发布时间】:2021-09-07 05:54:54
【问题描述】:
我看到了熟悉的问题,但没有任何东西可以帮助我解决问题。
假设我有一个二进制文件。 我想收集每 3 个写入位(在我们的例子中,filesize%3 == 0)并检查第 3 位是否是前两位的“|”操作的结果。 例如,如果这是我们的二进制文件: 111000101
所以我首先想得到 111,然后检查 1|1 是否为 1。 接下来,我想得到000,然后检查0|0 = 0。 最后,我想得到010,然后检查是否0|1 = 1。
现在,我一直在考虑的是创建包含 {1,1,1} 的 unsigned char arr[3],然后将数组发送到将检查 1|1 = 1 的函数。
问题是,我想不出一种从给定文件中获取特定位的方法。
有人知道我如何获得这些信息吗?
提前致谢!
【问题讨论】:
-
您是要处理二进制文件(一个位表示为一个位)还是一个文本文件,其中字符
0和1用于表示位? -
创建一个小函数,从缓冲区提供 3 位集合,该缓冲区具有
static变量以跟踪位位置等。如果缓冲区没有足够的位,请补充并从文件缓冲区重新对齐,如果没有字节,则从文件中读取更多(或仅一个)。 -
继续@MikeCAT 评论,你能告诉我们打开你的文本编辑器(记事本或vim),写
abc,然后保存一个文件有多少位? -
如果是位级别:8 包 3 位给出 24 位,正好适合 3 个字节。因此,如果您读取文件的三个字节乘三个字节,您可以快速提取带有 AND 0x249249 的 "third" 位和带有 AND 0xDB6DB6 的 "two Significant" 位。之后,验证两个掩码是布尔数学/操作。