我想比较两个十六进制的无符号字节。我就是这么想的:

if (memcmp (msgType ,  0x00003336, 2 ) == 0){}

这是gcc为msgType打印的内容:
(gdb) x msgType
0x7fffffffbb84: 0x00003336

我在找塞格法尔。我怎样才能修好它?
编辑:
我试过:
const unsigned char broadcast[2] = {0x33, 0x36};

但gdb显示:
(gdb) x broadcast
0x401e28 <broadcast>:   0x62723633

我需要:0x00003336

最佳答案

memcmp()的前两个参数是指向要比较的内存块的指针。See the manual page,原型是:

int memcmp(const void *s1, const void *s2, size_t n);

您使用绝对地址0x00003336作为s2的值,这似乎非常错误;在一般情况下,这不是有效的地址。
若要解决此问题,必须创建一个内存区域来保存要比较的值,并将指向该值的指针作为第二个参数传递。尝试:
const uint8_t data[] = { 0x36, 0x33 };

if(memcmp(msgType, data, sizeof data) == 0)
{
}

注意,上面的字节是交换的,假设您使用的是一个小小的endian系统。

关于c - 使用memcmp时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21754218/

10-09 21:03