我正在创建一个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位数?
感谢。
答案 0 :(得分:0)
十六进制浮点数变为可用。
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实现中的内部表示,但这是可选的。