比较十六进制值中的n个字符序列

时间:2011-05-16 09:40:03

标签: c eclipse compare hex

我基本上尝试将令牌(字符串)与十六进制数据类型进行比较!

示例:

#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中是否有熟悉的函数可以产生相同的效果。

2 个答案:

答案 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){