0

给定一个指针,我想将前两个字节与固定值进行比较。 data是一个空指针。有没有比这“更好”的方法:

unsigned char foo[] = {0xFF, 0x3B};
memcmp(data, foo, 2);

也许我不必创建一个新的字符数组?谢谢!

4

2 回答 2

1

编辑:由于对内存对齐和编译器/库优化的一些担忧sizeof(char)

作为平台相关的替代方案,这个答案可能有更好的性能memcmp

小端(英特尔字节顺序):

if (*(short*)foo == 0x3bff) ...

大端(网络字节顺序):

if (*(short*)foo == 0xff3b) ...
于 2013-10-02T09:41:56.863 回答
1

您当然应该尝试使用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)
{
}
于 2013-10-02T09:58:29.817 回答