【发布时间】:2013-02-05 05:10:24
【问题描述】:
我有以下一个 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 所以想知道是否有另一种方法(主要是因为我没有真正的方法知道密钥是否为整数)
谢谢
【问题讨论】:
-
我知道这可能看起来有点矫枉过正,但是您是否考虑过将一个转换为另一个,然后只做一个
memcmp()或一个strcmp()最终这就是您现在所做的一切,只有一个一个字节。如果您尝试多用途输入,那么您将面临漫长的挫折之路。为此,找到那个决定“但字符串和数字实际上只是字节,所以它们非常相似”的架构宇航员,然后拔掉他的氧气。 -
“可以包含整数或文本的 char 数组” - 准确了解您正在处理的数据类型非常重要。
-
这是未键入的存储引擎的一部分。因此这是无法实现的。
-
听起来你最好将你的字符串转换成数字并比较数字。
-
既然您处于一个非常具体的情况,为什么不尝试自己实施呢?字符串 -> 整数,如果字符串包含非数字字符,则有一个备用值,不是很复杂。
标签: c string char type-conversion