У меня есть шестнадцатеричное значение, хранящееся в массиве два байта:Преобразование шестнадцатеричного значения в массиве символов в целое значение
unsigned char hex[2] = {0x02, 0x00};
Как я могу преобразовать это десятичное значение?
У меня есть шестнадцатеричное значение, хранящееся в массиве два байта:Преобразование шестнадцатеричного значения в массиве символов в целое значение
unsigned char hex[2] = {0x02, 0x00};
Как я могу преобразовать это десятичное значение?
Вы можете использовать (операция поразрядного)
int b = (hex[0] << 8) | hex[1];
или (простая математика)
int b = (hex[0] * 0x100) + hex[1];
Зависит от эндианности, но что-то вроде этого?
short value = (hex[0] << 16) & hex[1];
это неверно для '<< 16' и' & '. – MByD
«* зависит от того, какой у вас индейца есть». –
Некоторые причины, почему это неверно: сначала вы меняете первый символ на 16 бит вместо 8 бит. Символ обычно равен 8 бит. Во-вторых, вы ИСПОЛЬЗУете две части, вам нужно ИЛИ их. Перемещая hex [0], вы оставляете первые 16 бит как нули, а когда ANDed с hex [1], вы эффективно удаляете hex [1]. (Поскольку нуль и всегда всегда равны нулю) Спасибо за ввод, хотя! – tgai
Это не является эффективным способом, по крайней мере, я не думаю, он будет работать, но он будет работать во всех ситуациях независимо от размера массива и легко преобразуется в 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.
В приведенном выше примере переменная «значение» будет иметь значение 16 843 009. Это эквивалентно, если вы сделали это ниже.
int value = p[0] | p[1] << 0x8 | p[2] << 0x10 | p[3] << 0x18;
Это одна из тех ночей ... Не стесняйтесь приносить как можно больше нарушений, как я этого заслужил. Я не уверен, почему, но чем ближе к финалу, тем больше у меня ужасные ужасные упущения в «мышлении». По какой-то причине я думал, что для этого есть нечто большее. Я сам убедился, что это было намного сложнее ... – tgai
@Mitch Wheat: Не беспокойтесь об этом. Вы прокомментировали, что заставили меня сделать паузу на секунду и понять, что я знаю ответ на свой вопрос. Когда я приближаюсь к запуску своего курятника, я нахожу себя в ужасе от ошибок, подобных этому, и выгляжу довольно глупым. Наверное, приятно напоминать, что делать ошибки и/или не вспоминать что-то из моей головы обречено на служение, а не на конец света. – tgai