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

标签 c floating-point hex

我正在创建一个 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/

相关文章:

c - 消息 "warning: implicit declaration of function"

c++ - 使用 CMake ExternalProject 中的源文件作为目标的依赖项

python浮点到整数列表不匹配

floating-point - OCaml 中的 80 位扩展精度浮点

c++ - 找到满足浮点不等式的最小整数

c - uint64_t 类型的参数与 void* 类型的参数不兼容

c - C 中的信号处理

java - 使用Java将十六进制转储的字符串表示形式转换为字节数组?

python-3.x - 如何从python中的.wav音频文件中删除/减少噪声

linux - 解析 ASCII 十六进制转储以正确转换为二进制