Преобразование шестнадцатеричного значения в массиве char в целочисленное значение - PullRequest
4 голосов
/ 26 апреля 2011

У меня есть шестнадцатеричное значение в двухбайтовом массиве:

unsigned char hex[2] = {0x02, 0x00};

Как я могу преобразовать это в десятичное значение?

Ответы [ 3 ]

6 голосов
/ 26 апреля 2011

Вы можете использовать (побитовая операция)

int b = (hex[0] << 8) | hex[1];

или (простая математика)

int b = (hex[0] * 0x100) + hex[1];

0 голосов
/ 21 сентября 2013

Это неэффективный способ, по крайней мере, я так не думаю, но он будет работать во всех ситуациях независимо от размера массива и легко преобразуется в b.

__int8 p[] = {1, 1, 1, 1, 1}; //Let's say this was the array used.
int value = sizeof(p); //Just something to store the length.
memcpy(&value, &p, value > 4 ? 4 : value); //It's okay to go over 4, but might as well limit it.

В приведенном выше примере переменная "value" будет иметь значение 16 843 009. Что эквивалентно тому, если вы сделали ниже.

int value = p[0] | p[1] << 0x8 | p[2] << 0x10 | p[3] << 0x18;
0 голосов
/ 26 апреля 2011

Зависит от порядкового номера, но что-то вроде этого?

short value = (hex[0] << 16) & hex[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...