例如,我的char数组可能类似于...
char array[8] = {0x00,0x07, 0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x71}
,我要检查char [2]到char [7]是否等于'28 FF AF 00 00 00'十六进制, 我将如何以最简单的方式做到这一点?我知道我可以单独检查每个元素,但我想知道是否可以指定要在char [2]到char [7]范围内搜索十六进制28FFAF000000。
答案 0 :(得分:3)
使用std::equal
:
mc.preschedule={T,F}
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>
,则可以使用C-ism {{ 3}}:
std::equal
答案 1 :(得分:3)
您可能会做类似的事情:
constexpr char expected[] = {0x28, 0xFF, 0xAF, 0x00, 0x00, 0x00};
return std::equal(std::begin(expected), std::end(expected), array + 2);