eLock的项目,查设备详细信息,需要做一个判断,看参数设定的ID与设备本身的ID是否符合

一开始使用了

if (0 == strncmp(hex, pdaInfo.dev_id, PDA_ID_LEN))
{ } 

然而试了好几个参数ID,不管与设备本身ID是否符合,都会进行到花括号里面...

最后了解到了原因:

设备ID并不是一串字符,而是一串十六进制数,看起来形如"0012ab"

这样一来,存储在dev_id成为3个字节,分别是00,12,ab

显然,如果hex参数输入的也是一个00开头的数组,一用strncmp就会认为两个字符串都是"",当然结果==0了

所以,在非字符串比较的时候,要用memcmp

上述过程改为

if (0 == memcmp(hex, pdaInfo.dev_id, PDA_ID_LEN)) 
{ } 

运行正确