Используя scanf, каждое число ввело, я хотел бы, чтобы моя программа распечатала две строки: например,
byte order: little-endian
> 2
2 0x00000002
2.00 0x40000000
> -2
-2 0xFFFFFFFE
-2.00 0xC0000000
Я могу заставить это распечатывать 2 в шестнадцатеричном числе, но мне также нужно плавание, и конечно я не могу scanf как тот, когда я должен также просканировать как интервал
Если я снял в качестве плавания, когда я пробую к printf, я получаю нуль. Если я сканирую в как плавание, я получаю корректный вывод. Я попытался преобразовать интервал в плавание, но он все еще выходит как нуль.
вот мой вывод до сих пор
Int - float - hex
byte order: little-endian
>2
2 0x000002
2.00 00000000
похоже, что я преобразовываю в штраф плавающий, почему привычка это печатает как шестнадцатеричное число? если я сканирую в как плавание, я получаю корректное шестнадцатеричное представление как первый пример. это должно быть чем-то простым. я действительно должен просканировать в том, поскольку десятичное число имеет в виду, что я выполняю это в cygwin
вот то, что я имею до сих пор..
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int HexNumber;
float convert;
printf("Int - float - hex\n");
int a = 0x12345678;
unsigned char *c = (unsigned char*)(&a);
if (*c == 0x78)
{
printf("\nbyte order: little-endian\n");
}
else
{
printf("\nbyte order: big-endian\n");
}
printf("\n>");
scanf("%d", &HexNumber);
printf("\n%10d ",HexNumber);
printf("%#08x",HexNumber);
convert = (float)HexNumber; // converts but prints a zero
printf("\n%10.2f ", convert);
printf("%#08x", convert); // prints zeros
return 0;
}