Преобразование Int в шестнадцатеричное без использования printf (программирование на C) - PullRequest
0 голосов
/ 24 августа 2011

Возможно ли преобразовать Int в шестнадцатеричное без использования printf?

Лучше всего, если все значения помещены в саму переменную и пример кода с пояснениями.

Ответы [ 8 ]

4 голосов
/ 24 августа 2011

Десятичная и шестнадцатеричная системы - это просто способы выражения значения типа int.В некотором смысле «это уже шестнадцатеричное».

3 голосов
/ 24 августа 2011

Я думаю, вы можете использовать itoa в stdlib.h :

char * itoa ( int value, char * str, int base ); or sprintf(str,"%x",value);

Документация: Документация Itoa

0 голосов
/ 24 августа 2011

int хранится на вашем компьютере в виде двоичного числа. Фактически, поскольку hex можно интерпретировать как сокращение для записи двоичного кода, вы можете даже сказать, что когда вы печатаете десятичное число с помощью printf, его необходимо преобразовать из hex в десятичное.

0 голосов
/ 24 августа 2011

Если вы имеете в виду отображение int как шестнадцатеричного числа в C, вам нужно написать функцию, которая делает то же самое, что printf.

Если вы имеете в виду приведение или внутреннее представление,это невозможно сделать, поскольку шестнадцатеричный тип данных не является типом данных.

0 голосов
/ 24 августа 2011

Да , определенно возможно преобразовать целое число в шестнадцатеричную строку без использования семейства функций форматирования "printf".

Вы можете написать такую ​​функцию, преобразовав числоот base-10 (как мы думаем об этом) до base-16 (шестнадцатеричный) и печати цифр в этом представлении (0-9A-F).Это потребует от вас много думать о основах, которые мы используем для представления чисел .

0 голосов
/ 24 августа 2011

Hexdecival vs Decimal vs Binary..etc .. - это только разные основания, которые представляют одно и то же число. printf не конвертирует ваш номер, он генерирует шестнадцатеричное строковое представление вашего номера. Если вы хотите реализовать собственное изучение , как сделать преобразование между десятичной и шестнадцатеричной базой.

0 голосов
/ 24 августа 2011

Конечно, это возможно. Подумайте только, как изначально была реализована printf ...

Я не буду давать вам полное решение, только подсказки, на основе которых вы сможете поэкспериментировать с реализацией в коде:

8-битное число может быть выражено в виде 2 шестнадцатеричных цифр, которые содержат старшие и младшие 4 бита соответственно. Чтобы получить эти биты, вы можете использовать операторы bit-shift (>>) и mask (&).

Получив 4-разрядное значение, вы можете легко сопоставить его с правильной шестнадцатеричной цифрой, используя последовательность if с, или (в качестве более элегантного решения) путем индексации в массив символов.

0 голосов
/ 24 августа 2011
cout << hex << intvar << endl;

Но если вам нужен ответ, который дает вам A за домашнее задание, вам не повезет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...