我有一个char *键,它是一个可以包含整数或文本的char数组。所以键可以有值3或tom例如
我有一个包含存储数据的byte *数据数组。我需要测试密钥是否等于数据。
我的逻辑目前正如下:
int j = 0 ;
for (j = 0; j < len; j++) {
sprintf(key_cmp, "%02x", (ulong)*data++);
}
if (!strcmp(key, key_cmp)) fprintf(stderr, "Equal \n");
我意识到这段代码是不正确的,因为我试图在这里打印为十六进制而不是char ...但是当我尝试使用%02x时,垃圾被打印出来。
我怎样才能确保01和1被视为平等?我意识到这可能因字节排序而异,因此我想不出一般的解决方案。我想避免使用atoi所以想知道是否有另一种方法(主要是因为我没有真正知道密钥是否为整数的方法)
由于
答案 0 :(得分:1)
猜测是你的问题是%02x
是int
而不是unsigned long
的格式 - 所以你在系统sizeof(int)!=sizeof(long)
会导致问题。
有关格式说明符的说明,请参阅[Wiki] [1]。
答案 1 :(得分:0)
因为char []是1个字节而byte []是1个字节,所以将它们作为字节数组(unsigned char)进行比较会更容易。在没有任何特殊格式的情况下,要么做同样的事情。
memcmp(key,data,len)
strcmp(key,data,len)