编写一个循环,根据大量可能的有效值检查变量的值 (C++)
Writing a loop that checks the value of a variable against a large number of possible valid values (C++)
如果有更好的方式来表达问题,请告诉我。可能是为什么我在谷歌搜索时找不到它。我目前正在开发一个程序,该程序在二进制文件中搜索字节串 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 00
04 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){
等等等等}
或者是否有更好的方式来编写该表达式?
您可以使用 std::any_of 或 std::none_of,具体取决于您的搜索范围。
std::vector<int> valid_bytes { 3,5,7,8,12,15 };
if (std::any_of(valid_bytes.begin(), valid_bytes.end(), [=](int x){ return x == the_byte_to_check; }) {
//The byte is valid!
}
如果最好检查充满无效字节的向量,您可以使用 std::none_of 来查看它是否与任何无效字节匹配。
std::vector<int> invalid_bytes { 3,5,7,8,12,15 };
if (std::none_of(invalid_bytes.begin(), invalid_bytes.end(), [=](int x){ return x == the_byte_to_check; }) {
//The byte is valid!
}
如果有更好的方式来表达问题,请告诉我。可能是为什么我在谷歌搜索时找不到它。我目前正在开发一个程序,该程序在二进制文件中搜索字节串 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 00
04 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){ 等等等等}
或者是否有更好的方式来编写该表达式?
您可以使用 std::any_of 或 std::none_of,具体取决于您的搜索范围。
std::vector<int> valid_bytes { 3,5,7,8,12,15 };
if (std::any_of(valid_bytes.begin(), valid_bytes.end(), [=](int x){ return x == the_byte_to_check; }) {
//The byte is valid!
}
如果最好检查充满无效字节的向量,您可以使用 std::none_of 来查看它是否与任何无效字节匹配。
std::vector<int> invalid_bytes { 3,5,7,8,12,15 };
if (std::none_of(invalid_bytes.begin(), invalid_bytes.end(), [=](int x){ return x == the_byte_to_check; }) {
//The byte is valid!
}