使用scanf,输入的每个数字,我希望我的程序打印出两行:例如
byte order: little-endian
> 2
2 0x00000002
2.00 0x40000000
> -2
-2 0xFFFFFFFE
-2.00 0xC0000000
我可以让它打印出十六进制的 2 但我还需要一个浮点数,当然当我需要扫描为 int 时我不能 scanf 作为一个
如果我在尝试 printf 时将其转换为浮点数,我会得到零。如果我作为浮点数扫描,我会得到正确的输出。我试图将 int 转换为浮点数,但它仍然为零。
这是我到目前为止的输出
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;
}