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

标签 c string char type-conversion

我有以下 char* 键,它是一个 char 数组,可以包含整数或文本。因此键的值可以是 3 或 tom

我有一个 byte* 数据数组,其中包含存储的数据。我需要测试 key 是否等于数据。

我目前的逻辑是:

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

谢谢

最佳答案

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

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

关于Char* 和 byte* 相等比较(数字和文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14975807/

相关文章:

java - 如何比较由子字符串创建的字符串?

c - 如何将 LSB 提取的数据转换为文本或二进制转换为文本

将控制序列转换为正确的字符

python - 在 Xcode for Mac 中编译和链接 Python 的 C 扩展

c - C 中棘手的指针算术 : **k

我们可以通过 hiredis 在 Redis 中保存 C 结构吗?我可以保存但无法获取

java - 我有一个带有一些格式的跨文本。如何根据该格式将其转换为字符串?

c++ - 将字符串相互比较和 append 的问题c++

C++:此代码编译,但抛出运行时检查失败 #2 - 变量 'num' 周围的堆栈已损坏。发生

c - 用于从 matlab 创建可执行 .mexa64 文件的 Makefile