【问题标题】:How to check if char array combines to make certain consecutive list of chars?如何检查 char 数组是否组合成某个连续的字符列表?
【发布时间】:2019-02-11 16:53:14
【问题描述】:

例如,我的 char 数组可能类似于...

char array[8] = {0x00,0x07, 0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x71}

我想检查 char[2] 到 char[7] 是否等于 '28 FF AF 00 00 00' hex, 我将如何以最简单的方式做到这一点?我知道我可以单独检查每个元素,但我想知道我是否可以以某种方式指定我在空间 char[2] 到 char[7] 内搜索十六进制 28FFAF000000。

【问题讨论】:

    标签: c++ arrays char


    【解决方案1】:

    std::equal:

    const bool equal = std::equal(array+2, array+8, "\x28\xff\xaf\x00\x00\x00");
    

    std::equal(start1, end1, start2) 逐个元素地比较两个范围 [start1, end1)[start2, <end2>),其中选择了 <end2>,因此这两个范围的长度相等。

    如果您确定只使用字节,并且如果效率很重要,并且您已经检查过您的编译器没有优化 std::equal,您可以使用 C-ism std::memcmp

    const bool equal = (0 == std::memcmp(array+2, "\x28\xff\xaf\x00\x00\x00", 6));
    

    【讨论】:

      【解决方案2】:

      你可能会这样做:

      constexpr char expected[] = {0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00};
      
      return std::equal(std::begin(expected), std::end(expected), array + 2);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        • 2022-11-10
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        相关资源
        最近更新 更多