Char *和byte *相等比较(数字和文本)

时间:2013-02-20 09:00:25

标签: c string char type-conversion

我有一个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所以想知道是否有另一种方法(主要是因为我没有真正知道密钥是否为整数的方法)

由于

2 个答案:

答案 0 :(得分:1)

猜测是你的问题是%02xint而不是unsigned long的格式 - 所以你在系统sizeof(int)!=sizeof(long)会导致问题。

有关格式说明符的说明,请参阅[Wiki] [1]。

答案 1 :(得分:0)

因为char []是1个字节而byte []是1个字节,所以将它们作为字节数组(unsigned char)进行比较会更容易。在没有任何特殊格式的情况下,要么做同样的事情。

memcmp(key,data,len)
strcmp(key,data,len)