代码之家  ›  专栏  ›  技术社区  ›  Samuel Wolf Sharp

编写一个循环,对照大量可能的有效值(C++)检查变量的值

  •  -4
  • Samuel Wolf Sharp  · 技术社区  · 7 年前

    如果有更好的提问方式,请告诉我。可能是为什么我在谷歌上找不到它。我目前正在开发一个程序,该程序在二进制文件中搜索字节字符串0xb8000000000000,然后一次返回8个字节,寻找不适合列表的字节。例如,字节0x04、0x06、0xB1、0xB7(以及大量其他字节)是有效的,但0x00、0xC1、0xA9以及几乎相同数量的有效字节将无法通过检查,导致一旦发现无效字节,程序将最后找到的有效字节和0xb8000000000000之间的所有数据转储到文件中。将变量与每个有效值进行比较,并在发现一个无效值时停止,最简单、最干净的方法是什么?

    这是我正在查看的一个数据块示例。我将从靠近末尾的B8开始,向后跳转8个字节,直到达到0x00,每次跳转都检查字节的值。

    00 文学士
    B6 00 00 00 0F 32 05 00 00 00 00 00 02 04
    常设费用 42 CA 85 FF 97 FF FF BB型 00 00 00 80 00 80 00
    00 10 3F 80 04 D4 B0 地下一层 02 04 00 00 02 06 04
    00 00 00 00 00 00 00

    我不知道如何编写循环。我会这样做吗, if(变量!=BA | B6 | B7 | FC | BB | 04 | B1){

    还是有更好的方法来写这个表达式?

    1 回复  |  直到 7 年前
        1
  •  0
  •   super    7 年前

    您可以使用std::any\u of或std::none\u 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::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!
    }