C语言十六进制数如何转换为小数及用科学记数法表示

我需要输入一个八位十六进制整数然后分别输出为不同类型,我想问如何将其输出为32位小数和用科学记数法表示,而且输出分正负?

img

你先存进一个long里
然后直接按%f打印它

这里就能提现union的用处了。

#include <stdio.h>

union data
{
    unsigned int idata;
    float fdata;
};

void xtod(char buf[], unsigned int *n)
{
    *n = 0;
    int i = 0, t, x = 1;
    i = strlen(buf) - 1;
    while (i >= 0)
    {
        if (buf[i] > 'a')
            t = buf[i] - 'a' + 10;
        else
            t = buf[i] - '0';
        *n += t * x;
        x *= 16;
        i--;
    }
}

int main()
{
    union data n;
    char buf[9];
    scanf("%s", buf);
    xtod(buf, &n.idata);
    printf("%d\n%u\n%f\n%e\n", n.idata, n.idata, n.fdata, n.fdata);

    return 0;
}

看着好像是呢喃oj上的题
强制转换内存数据类型就行了

img