将十六进制转换为float,将float转换为十六进制

时间:2014-02-05 05:31:33

标签: c floating-point hex

我正在创建一个C程序,将十六进制转换为float,将float转换为十六进制。

我的解决方案已经解决了,但我想问几个问题。

我要解决的方法是:

首先通过扫描数组并检查字符串输入的前2个索引是否为0x,然后它是十六进制来将输入识别为浮点数或十六进制数。 我现在的问题是,我可以编写一个代码:

char* string;
scanf(%s, string);
if(string[0] == '0' && string[1] == 'x')
{
printf("The number you've entered is a hexadecimal and the corresponding float is:");

在这里,我真的不知道C中的占位符是什么样的%x。 %f是否适用于字符串?

我试过这样做,但由于某种原因,我的编译器没有读取条件并跳过它。 另外,我知道printf()适用于double。所以,如果我用(unsignedint)转换double,我可以将float转换为十六进制,如果我这样做:

float f;
printf("Enter float");
scanf("%f", &f);
printf("hex is %x", *(unsigned int*)&f);

这完全没问题。

在我必须编写的程序中,如果十六进制参数超出范围,我的程序必须产生错误。(如同十六进制数字太多)。但那通常应该是什么意思呢?基于什么? IEEE 754格式? 32位数?

感谢。

1 个答案:

答案 0 :(得分:0)

从C99起,

十六进制浮点数变为可用。

e.g。

char *input = "0xf.1p2";//
float x = 0xf.1P2;//60.25
printf("%f\n", x);
printf("%8.7a\n", x);
float f;
sscanf(input, "%f", &f);
printf("%f\n", f);
printf("%8.7a\n", f);
/* result
60.250000
0xf.1000000p+2
60.250000
0xf.1000000p+2
*/

基于什么? IEEE 754格式? 32位数?

hex is %x", *(unsigned int*)&f);

以上是您要查看内部表示的内容。

IEEE标准用于许多C实现中的内部表示,但这是可选的。