给定一个指针,我想将前两个字节与固定值进行比较。
data
是一个空指针。有没有比这“更好”的方法:
unsigned char foo[] = {0xFF, 0x3B};
memcmp(data, foo, 2);
也许我不必创建一个新的字符数组?谢谢!
编辑:由于对内存对齐和编译器/库优化的一些担忧sizeof(char)
,
作为平台相关的替代方案,这个答案可能有更好的性能memcmp
:
小端(英特尔字节顺序):
if (*(short*)foo == 0x3bff) ...
大端(网络字节顺序):
if (*(short*)foo == 0xff3b) ...
您当然应该尝试使用memcmp()
,但如果这会产生开销,您可以像@LS_dev建议的那样进行,尽管我建议进行显式字符访问以避免字节顺序问题:
if(((unsigned char *) data)[0] == 0xff && ((unsigned char *) data)[1] == 0x3b)
{
}
当然,为了显着提高清晰度,排除选角是有意义的:
const unsigned char *chardata = data;
if(chardata[0] == 0xff && chardata[1] == 0x3b)
{
}