#c #hex #arrays
#c #шестнадцатеричное #массивы
Вопрос:
У меня есть шестнадцатеричное значение, хранящееся в двухбайтовом массиве:
unsigned char hex[2] = {0x02, 0x00};
Как я могу преобразовать это в десятичное значение?
Комментарии:
1. Это одна из таких ночей… Не стесняйтесь оскорблять меня как можно больше, поскольку я этого заслуживаю. Я не уверен, почему, но чем ближе финал, тем больше у меня ужасных ошибок в «мышлении». По какой-то причине я думал, что это нечто большее. Я сам убедился, что это было намного сложнее…
2. @Mitch Wheat: Не беспокойся об этом. Ваш комментарий на самом деле заставил меня на секунду задуматься и понять, что я действительно знал ответ на свой вопрос. По мере приближения к запуску моего coop я нахожу себя в ужасе от того, что совершаю подобные ошибки и выгляжу довольно глупо. Вероятно, полезно напомнить, что совершение ошибок и / или то, что я чего-то не помню из головы, обречено произойти, а не конец света.
Ответ №1:
Вы можете использовать (побитовая операция)
int b = (hex[0] << 8) | hex[1];
или (простая математика)
int b = (hex[0] * 0x100) hex[1];
Ответ №2:
Зависит от порядкового номера, но что-то вроде этого?
short value = (hex[0] << 16) amp; hex[1];
Комментарии:
1. Часть » зависит от того, какой у вас индеец » верна.
2. Некоторые причины, по которым это неверно: сначала вы сдвигаете первый символ на 16 бит вместо 8 бит. Символ обычно состоит из 8 бит. Во-вторых, вы объединяете две части, вам нужно ИЛИ их. Сдвигая шестнадцатеричное значение [0], вы оставляете первые 16 бит в виде нулей, а при добавлении шестнадцатеричного значения[1] вы эффективно удаляете шестнадцатеричное значение[1]. (Поскольку нуль и значение всегда равно нулю) Хотя спасибо за ввод!
Ответ №3:
Это неэффективный способ, по крайней мере, я так не думаю, но он будет работать во всех ситуациях, независимо от размера массива, и легко преобразуется в 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(amp;value, amp;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;