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



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

例:

#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");
    }
}

当然,这实际上有效。我正在比较至少 n 个字符的 2 个字符串...没关系。

但是现在我想用十六进制值而不是字符串做同样的事情!像这样:

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

嗯,我不确定这是你想要的,但现在你正在将十六进制的值转换为一个(肯定是无效的)地址。要做你想做的事情,你必须采取地址:strncmp((char*)&hex, "0x", 2)但我不能推荐。

我建议你先将十六进制转换为字符串,然后再比较:

char buf[256];
snprintf(buf, 256, "0x%x", hex);
if(strncmp(buf, "0x", 2)==0){

您可以使用 sprintf:

char hexVal[3];
sprintf(hexVal, "%02X", hex);
if(strncmp(token, hexVal, 3)==0){

最新更新