我基本上尝试将令牌(字符串)与十六进制数据类型进行比较!
示例:
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
char* token ="Hello";
int hex = 0x2F;
if(strncmp(token, "Hil", 3)==0){
printf("Token founde"); //works!
}else{
printf("sorry seems to be the hardest word");
}
}
这当然有效。 我正在比较2个字符串和至少n个字符串...没问题。
但是现在我想用十六进制值而不是字符串做同样的事情! 像这样:
int hex = 0x2F;
if(strncmp((char*)hex, "0x", 2)==0){
printf("Token founde"); //works!
}else{
printf("sorry seems to be the hardest word");
}
}
由于strncmp仅比较字符串,我试图将十六进制值转换为char * ... 它根本不起作用。
我到处搜索......甚至在我的“编程语言C”一书中...但我无法弄清楚如何解决这个问题。
在java中,我会使用类似startsWith等的东西......但我不知道c中是否有熟悉的函数可以产生相同的效果。
答案 0 :(得分:2)
嗯,我不确定这是你想要的,但是现在你将十六进制的值转换为(绝对无效的)地址。要做你想做的事,你必须拿地址:strncmp((char*)&hex, "0x", 2)
,但我不能推荐。
我建议您首先将十六进制转换为字符串然后进行比较:
char buf[256];
snprintf(buf, 256, "0x%x", hex);
if(strncmp(buf, "0x", 2)==0){
答案 1 :(得分:0)
您可以使用sprintf:
char hexVal[3];
sprintf(hexVal, "%02X", hex);
if(strncmp(token, hexVal, 3)==0){