【问题标题】:Convert a hexadecimal to a float and a float to a hexadecimal将十六进制转换为浮点数,将浮点数转换为十六进制
【发布时间】:2014-03-01 10:01:53
【问题描述】:

我正在创建一个 C 程序来将十六进制转换为浮点数并将浮点数转换为十六进制。

我已经想到了解决方案,但我有几个问题想问。

我要解决的方法是:

首先通过扫描数组并检查字符串输入的前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() 适用于双倍。因此,如果我通过 (unsignedint) 转换双精度,则可以将浮点数转换为十六进制:

float f;
printf("Enter float");
scanf("%f", &f);
printf("hex is %x", *(unsigned int*)&f);

这工作得很好。

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

谢谢。

【问题讨论】:

    标签: c floating-point hex


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2016-06-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多