Мне дана строка hex_txt, содержащая четырехзначный шестнадцатеричный номер, описанный в коде, разделенный двумя записями. Мне нужно преобразовать его в десятичный. Следующее - это то, как я это делаю.Преобразование шестнадцатеричной строки, хранящейся в виде символов в десятичный код в C
unsigned char hex_txt[] = "\xAB\xCD";
unsigned char hex_num[5];
unsigned int dec_num;
sprintf(hex_num, "%.2x%.2x", (int)hex_txt[0], (int)hex_txt[1]);
printf("%s\n", hex_num);
sscanf(hex_num, "%x", &dec_num);
printf("%d\n", dec_num);
Есть ли более быстрый или более эффективный способ сделать это? Это мое текущее решение ad hoc, но я хотел бы знать, есть ли подходящий способ сделать это.
Точно, что я искал, спасибо. – v64
Как вы можете быть уверены (без знака) hex_txt [0] * 256 не равен нулю? –
@Mike: hex_txt [0] - 0xAB или 171; 171 * 256 = 43776. Если «int» было 16-разрядной величиной, это было бы отрицательным отличным от нуля результатом (или, возможно, сигналом переполнения, но я не слышал о машине, которая генерирует сигнал переполнения для подписанного арифметического переполнения); если это 16-разрядное количество без знака, это все равно будет отличным от нуля. Я не вижу, чтобы умножение давало нуль. И, кроме того, мой ответ не зависел от умножения, дающего ненулевой результат - оставив меня озадаченным тем, откуда возник ваш вопрос. –