Хранить шестнадцатеричный эквивалент символа в C - PullRequest
0 голосов
/ 25 марта 2012

Второй ответ на вопрос: Как преобразовать ASCII в шестнадцатеричный код и наоборот?

Я хочу сохранить шестнадцатеричный эквивалент символа [3] различных символов следующим образом:

char *str ="abcd";

// I want to get hex[3] of each character in above string and save into the following:

char str2[4]; // should contain hex values as : \x61 for a,\x62 for b,\x63 for c,\x64 for d

Как я могу это сделать?

До сих пор я пробовал следующее:

int i;
char ch;
char hex[3];
for(i=0; i<strlen(str);i++) {
    ch = charToHex(*(str+i), hex);
    // now hex contains the first and second hex characters in hex[0] & hex[1]
    // I need to save them in the first index of str2 
    // e.g. if hex[0] = 7 and hex[1] = f, then str2[0] should be "\x7f"

    // -> how do I do this part ?

}

Спасибо.

1 Ответ

1 голос
/ 25 марта 2012

Вы можете использовать цикл for , чтобы выполнить итерацию по всем символам строки, а затем применить преобразование для каждого символа.Имейте в виду, что строки C заканчиваются нулем .

Также обратите внимание, что 4 символа будет недостаточно, если вы хотите сохранить \x61\x62\x63\x64 - вам понадобится 4 * strlen(str) + 1, т.е.17.

В ответ на код:

Вам на самом деле не нужно ch.Функция charToHex возвращает void, то есть ничего.

Просто скопируйте символы в выходную строку, например:

str2[2*i] = hex[0];
str2[2*i+1] = hex[1];

Опять не надоне забудьте установить нулевой терминатор в результирующей строке.

Кроме того, поскольку вы вызываете strlen на каждой итерации, вы пишете алгоритм Шлемеля Пейнтера .

...