我正在创建一个 C 程序来将十六进制转换为 float 并将 float 转换为十六进制。
我已经想好了解决方案,但我有几个问题想问。
我要解决这个问题的方法是:
首先通过扫描数组并检查字符串输入的前 2 个索引是否为 0x 来识别输入是 float 还是十六进制,则它是十六进制。 我现在的问题是,例如,我可以编写这样的代码吗:
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位数字?
谢谢。
最佳答案
十六进制 float 从 C99 开始可用。
例如
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 实现中的内部表示,但那是可选的。
关于将十六进制转换为 float 并将 float 转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21569354/