使用scanf,每输入一个数字,我想让程序打印出两行结果,例如:
byte order: little-endian
> 2
2 0x00000002
2.00 0x40000000
> -2
-2 0xFFFFFFFE
-2.00 0xC0000000
我可以将它以十六进制打印出来,但我还需要一个浮点数,当然我不能用scanf读取一个浮点数,因为我也需要以int的形式扫描。
如果我将其转换成浮点数后再尝试printf,那么输出会变成零。如果我以浮点数的形式进行扫描,则可以得到正确的输出。我已经尝试将int转换为float,但结果仍然是零。
以下是我的输出结果:
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;
}