我想比较两个十六进制的无符号字节。我就是这么想的:
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/