Сравнение последовательности из n символов в шестнадцатеричном значении - PullRequest
0 голосов
/ 16 мая 2011

Я в основном пытаюсь сравнить токен (строку) с шестнадцатеричным типом данных!

Пример:

#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 сравнивает только строки, я попытался привести шестнадцатеричное значение к символу * ... Это совсем не работает.

I 'я искал везде ... даже в моей книге "Язык программирования C" ... но я не могу понять, как решить эту проблему.

В Java я бы использовал что-то вроде startWith и т. д.... но я не знаю, есть ли в c знакомая функция, которая могла бы иметь такой же эффект.

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Хм, я не уверен, что это то, что вам нужно, но сейчас вы конвертируете значение гекса в (скорее всего, недействительный) адрес.Чтобы сделать то, что вы хотите, вы должны взять адрес: strncmp((char*)&hex, "0x", 2), но я не могу рекомендовать это.

Я предлагаю сначала преобразовать гекс в строку, а затем сравнить:

char buf[256];
snprintf(buf, 256, "0x%x", hex);
if(strncmp(buf, "0x", 2)==0){
0 голосов
/ 16 мая 2011

Вы можете использовать sprintf :

char hexVal[3];
sprintf(hexVal, "%02X", hex);
if(strncmp(token, hexVal, 3)==0){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...