Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查字符数组是否组合成某些连续的字符列表?_C++_Arrays_Char - Fatal编程技术网

C++ 如何检查字符数组是否组合成某些连续的字符列表?

C++ 如何检查字符数组是否组合成某些连续的字符列表?,c++,arrays,char,C++,Arrays,Char,例如,我的字符数组可能类似于 char array[8] = {0x00,0x07, 0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x71} 我想检查char[2]到char[7]是否等于'28 FF AF 00'十六进制, 我该如何以最简单的方式做到这一点?我知道我可以单独检查每个元素,但我想知道我是否可以指定在char[2]到char[7]的空间中搜索十六进制28FFAF000000。 std::equalstart1、end1、start2逐元素比较两个范围[

例如,我的字符数组可能类似于

char array[8] = {0x00,0x07, 0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x71}
我想检查char[2]到char[7]是否等于'28 FF AF 00'十六进制, 我该如何以最简单的方式做到这一点?我知道我可以单独检查每个元素,但我想知道我是否可以指定在char[2]到char[7]的空间中搜索十六进制28FFAF000000。

std::equalstart1、end1、start2逐元素比较两个范围[start1、end1和[start2],其中选择了这两个范围,因此两个范围的长度相等

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


您可能会这样做:

constexpr char expected[] = {0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00};

return std::equal(std::begin(expected), std::end(expected), array + 2);
const bool equal = (0 == std::memcmp(array+2, "\x28\xff\xaf\x00\x00\x00", 6));
constexpr char expected[] = {0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00};

return std::equal(std::begin(expected), std::end(expected), array + 2);