C Преобразование массива символов в целые числа - PullRequest
0 голосов
/ 26 апреля 2018

Я видел много сообщений на эту тему, но они не совсем то, что мне нужно.

У меня есть массив символов, который содержит [8,2,A,8], но кодируется как [0x38, 0x32, 0x61, 0x38]. Это ASCII-представления 82A8. Мне нужно поместить эти значения в uint64_t. Что я сейчас делаю, так это пошагово перебираю массив, добавляя значение к переменной, затем сдвигая переменную вправо на 4.

for(i=start; i<end; i++)
{
    value |= testArray[i] - '0'
    value = value << 4;
}

Проблема возникает в символе A, когда я сдвигаю его, он отображается как 1, а не A. Мне нужен простой способ, которым я могу перебрать этот массив, взять закодированные в ascii значения и преобразовать их в целое число.

82A8 должно равняться 33448, но я не могу заставить это рассчитать правильно.

1 Ответ

0 голосов
/ 26 апреля 2018

Правильный путь:

char digits[]={'8','2','A','8'};
int value= 0;

for(i=0; i<4; i++)
{
    if (digits[i]>='A')
         value = value*16 + digits[i] - 'A' + 10;
    else
         value = value*16 + digits[i] - '0';
}
...