0

我有以下一个 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");

我意识到这段代码不正确,因为我试图在这里打印为十六进制而不是字符......但是当我尝试使用 %02x 时,垃圾会被打印出来。

我怎样才能确保 01 和 1 将被视为平等?我意识到这可能因字节顺序而异,因此我想不出一个通用的解决方案。我想避免使用 atoi 所以想知道是否有另一种方法(主要是因为我没有真正的方法知道密钥是否为整数)

谢谢

4

2 回答 2

1

猜测是你的问题是不是 a%02x的格式- 所以你在系统上会导致问题。intunsigned longsizeof(int)!=sizeof(long)

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

于 2013-02-20T11:04:30.020 回答
0

因为 char[] 是 1 个字节,而 byte[] 是 1 个字节,所以将它们作为字节数组(无符号字符)进行比较会更容易。没有任何特殊格式,两者都会做同样的事情。

memcmp(key,data,len)
strcmp(key,data,len)
于 2013-02-20T14:27:32.670 回答