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);