Как мне преобразовать десятичное целое число в один шестнадцатеричный символ? (С) - PullRequest
2 голосов
/ 28 июня 2010

Я пытаюсь преобразовать десятичное целое в шестнадцатеричное. Я много занимался поиском в Интернете и нашел много способов сделать это. Однако каждый найденный способ конвертируется в строку; например, я могу конвертировать 100 в «64». Это не то, что мне нужно сделать. Я хочу иметь возможность конвертировать 100 в '0x64', это совсем другое дело. По некоторым причинам, я подозреваю, что ответ будет чрезвычайно простым, но я не могу найти / запомнить его. Я пишу на языке программирования C, просто чтобы уточнить. Любая помощь или идеи будут высоко оценены.

Спасибо, Hassan

Ответы [ 4 ]

5 голосов
/ 28 июня 2010

Вы не можете "преобразовать" число из десятичного в шестнадцатеричное, потому что это ... число (обычно хранится в памяти как дополнение до двух ).Все представления одного и того же числа во всех возможных позиционных системах живут в одной и той же точке на числовой линии.Хотя вы можете напечатать это в разных базах:

int num = 15;
printf( "%d", num );   /* prints 15 */
printf( "0x%x", num ); /* prints 0xf */
printf( "0%o", num );  /* prints 017 (octal) */

num = 0xf;
printf( "%d", num );   /* prints 15 */
printf( "0x%x", num ); /* prints 0xf */
printf( "0%o", num );  /* prints 017 (octal) */

num = 017;
printf( "%d", num );   /* prints 15 */
printf( "0x%x", num ); /* prints 0xf */
printf( "0%o", num );  /* prints 017 (octal) */
5 голосов
/ 28 июня 2010

Целочисленные типы в языке C на самом деле не имеют основание.Когда вы говорите:

int a = 100;
int b = 0x64;

... оба значения a и b имеют одинаковое значение.Нет смысла говорить о преобразовании a в шестнадцатеричное (или b в десятичное).

0 голосов
/ 28 июня 2010

100 в десятичном виде - 0x64 в шестнадцатеричном, нет необходимости в «преобразовании».Основание целого числа - это просто вопрос интерпретации.

0 голосов
/ 28 июня 2010

Гм,

int i = 100;
char c = i; // c now has the value 0x64 (aka decimal 100)

на самом деле вам больше ничего не нужно делать, кроме как быть уверенным, что i не больше 255.

Числовые базы только на самом делевступать в игру при печати или иным образом отображать число для человека.Что касается числа в памяти, то 100 - это 0x64, это 0144 - это 1100100. Все они имеют одинаковое значение, поэтому все они представлены одним и тем же набором битов.

Это все равно, что спросить, как бы вы отобразилизеленый цвет по-испански.Зеленый - это зеленый - это неважно, на каком языке вы говорите.Только когда вы пытаетесь придумать способ написать это как слово, вы должны подумать, какой язык вы собираетесь использовать.Так же и с числами и решением, какую базу вы собираетесь использовать.

...