Как проверить «00» в шестнадцатеричной строке в C? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь взять шестнадцатеричную строку значений и декодировать ее в обычный текст. Значения в строке должны быть разделены с «00» для NULL, поэтому я пытаюсь проверить, когда появляется «00», и заменить его в декодированной строке на «,», чтобы я мог разграничить значения позже .


int main()
{
    char decoded[256];
    const char hex[] = "746573743d7468697300746573743d74686973";
    strcpy(decoded, "");
    char curr[4];
    char next[2];
    int i = 0;
    while (i+1 < strlen(hex)){
        if((hex[i] == 0) && (hex[i+1] == 0)){
            sprintf(decoded + strlen(decoded), ",");
            i = i+2;
        }
        else{
            strcpy(curr, "");
            strcpy(next, "");
            sprintf(curr, "%c", hex[i]);
            sprintf(next, "%c", hex[i+1]);
            strcat(curr, next);
            int num = (int)strtol(curr, NULL, 16);
            sprintf(decoded + strlen(decoded), "%c", num);
            i = i+2;
        }
    }
    printf("%s", decoded);
    return 0;
}

При выполнении этого я получаю:

test = thistest = this

Что я хочу:

test = this, test = this

Я попытался отладить, просто проверив, что hex [i] = 0, и напечатав что-то, и ничего не появляется, либо. Любые идеи? Спасибо!

1 Ответ

2 голосов
/ 27 февраля 2020
if((hex[i] == 0) && (hex[i+1] == 0)){

Ваше состояние проверяется на значение 0. Вы хотите проверить наличие символа '0':

if((hex[i] == '0') && (hex[i+1] == '0')){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...