gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:25 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com