【发布时间】:2017-09-28 16:47:28
【问题描述】:
如果有更好的方式来表达这个问题,请告诉我。可能是为什么我在谷歌搜索时找不到它。我目前正在开发一个程序,该程序在二进制文件中搜索字节字符串 0xB800000000000000,然后一次返回 8 个字节以查找不适合列表的字节。例如,字节 0x04、0x06、0xB1、0xB7(以及其他大量字节)是有效的,但 0x00、0xC1、0xA9 和几乎同样多的有效字节将无法通过检查,导致程序转储之间的所有数据一旦找到无效字节,最后找到的有效字节和 0xB800000000000000 到文件。将变量与每个有效值进行比较并在找到不正确的值时停止的最简单、最干净的方法是什么?
这是我正在查看的数据块的示例。我将从接近尾声的 B8 开始,然后跳回 8 个字节,直到到达 0x00,每次跳转时检查字节的值。
00 00 00 00 FF FF FF FF BA 00 14 02 00 00 00 00
B6 00 00 00 00 0F 32 05 B7 00 00 00 00 00 02 04
FC 42 CA 85 FF 97 FF FF BB 00 00 00 80 00 80 0004 00 10 3F 80 04 D4 B0 B1 02 04 00 00 02 06 04
B8 00 00 00 00 00 00 00
我不确定如何编写循环。我会这样说, 如果(变量!= BA | B6 | B7 | FC | BB | 04 | B1){ 废话废话}
或者有没有更好的方法来编写该表达式?
【问题讨论】:
-
看看How to Ask 了解反对意见
-
创建一个大小为 24 的字节数组并检查最后一个 16 是否匹配
0xB800000000000000模式,然后验证前一个 8 个?通过进一步“移动”数组 1 个字节重复该过程(再读取 1 个字节并将其分配给数组的最后一个字节,然后将前一个字节向后移动,丢弃第一个字节)