Как преобразовать шестнадцатеричный массив в десятичный и обратно в C? - PullRequest
0 голосов
/ 05 ноября 2018

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

int main()
{
    char num[] = {0x02,0x03,0x04};
    long n = strtol(num, NULL, 16);
    printf("n=%ld\n", n);  
}

Я получаю "0" здесь, в то время как я ожидаю "262914".

EDIT:

Я знаю, что установка char num[] = "0x040302" даст мне ожидаемый результат, но он должен быть в пределах {}, как {0x02,0x03,0x04}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Ответ просто num[0] + (num[1] << 8) + (num[2] << 16). Как правило, если num имеет длину n байтов, то ответ будет таким:

long i, r = 0;

for (i = 0; i < n; ++i)
{
    r += (long)(num[i]) << (8*i);
}

Конечно, убедитесь, что num соответствует long (обычно 4 или 8 байт в зависимости от вашей системы).

0 голосов
/ 05 ноября 2018

Я знаю, что установка char num [] = "0x040302" даст мне ожидаемый вывод, но он должен быть внутри {} вроде {0x02,0x03,0x04}

"0x040302" является эквивалентом {'0', 'x', '0', '4', '0', '3', '0', '2', 0}, или {0x30, 0x78, 0x30, 0x34, 0x30, 0x33, 0x30, 0x32, 0x00} в предположении ASCII.

...