我正在创建一个C程序来将十六进制转换为浮点,将浮点转换为十六进制。
我已经把解决办法想好了,但我有几个问题想问。
我要解决这个问题的方法是:
首先通过扫描数组并检查字符串输入的前两个索引是否为x,将输入识别为浮点或十六进制。
在这一点上,我的问题是,我是否可以这样写一个代码:

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有效。因此,如果我将double转换为(unsignedint),则可以将float转换为十六进制:
float f;
printf("Enter float");
scanf("%f", &f);
printf("hex is %x", *(unsigned int*)&f);

这很好用。
在程序中,我必须写它说我的程序必须产生一个错误,如果十六进制参数超出范围(因为在太多的十六进制数字)。但这通常意味着什么?基于什么?IEEE 754格式?32位数字?
谢谢。

最佳答案

十六进制浮点数从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实现中的许多内部表示,但这是可选的。

关于c - 将十六进制转换为float并将float转换为十六进制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21569354/

10-15 17:14