Как преобразовать шестнадцатеричное число в Ascii в C - PullRequest
0 голосов
/ 23 февраля 2011

Я планирую сделать программу, подобную этой:

loop

 read first character
 read second character

 make a two-digit hexadecimal number from the two characters
 convert the hexadecimal number into decimal
 display the ascii character corresponding to that number.

end loop

Проблема, с которой я столкнулся, заключается в том, чтобы превратить два символа в шестнадцатеричное число, а затем превратить его в десятичное число.Когда у меня есть десятичное число, я могу отобразить символ ascii.

Ответы [ 3 ]

3 голосов
/ 23 февраля 2011

Если вы действительно не хотите писать преобразование самостоятельно, вы можете прочитать шестнадцатеричное число с помощью [f] scanf, используя преобразование %x, или вы можете прочитать строку и преобразовать с (для одной возможности) strtol.

Если вы хотите сделать преобразование самостоятельно, вы можете преобразовать отдельные цифры примерно так:

if (ixdigit(ch))
    if (isdigit(ch))
        value = (16 * value) + (ch - '0');
    else
        value = (16 * value) + (tolower(ch) - 'a' + 10);
else
    fprintf(stderr, "%c is not a valid hex digit", ch);
2 голосов
/ 23 февраля 2011
char a, b;

...read them in however you like e.g. getch()

// validation
if (!isxdigit(a) || !isxdigit(b))
    fatal_error();

a = tolower(a);
b = tolower(b);

int a_digit_value = a >= 'a' ? (a - 'a' + 10) : a - '0';
int b_digit_value = b >= 'a' ? (b - 'a' + 10) : b - '0';
int value = a_digit_value * 0x10 + b_digit_value;
1 голос
/ 23 февраля 2011

поместите два ваших символа в массив символов, завершите его нулем и используйте strtol() из '' ( docs ), чтобы преобразовать его в целое число.

char s[3];

s[0] = '2';
s[1] = 'a';
s[2] = '\0';

int i = strtol(s, null, 16);
...