以十进制和浮点格式打印十六进制值

时间:2014-01-07 12:32:13

标签: c hex

我正在尝试执行这个简单的代码,以十进制和浮点格式打印十六进制值,但它不会打印任何内容。

任何人都可以提供帮助..

#include<stdio.h>
#include<stdlib.h>
int  main()
{
    char content[]={0x24,0x00};
    int i;
    for(i=0;i<2;i++)
    {
        printf("%d",content[i]);
        printf("%.1f",content[i]/10.0);
    }
    printf("%.2f",(100*(unsigned)content[0]+(unsigned)content[1])/1000.0);
}

1 个答案:

答案 0 :(得分:2)

首先,没有“十六进制值”这样的东西。

数值可以是整数或非整数。

  • 对于整数值,有几个可选的大小 - 1,2,4或8个字节。

  • 对于非整数值,有两个可选的大小--4个字节(浮点)或8个字节(双)。

你的'content'变量是一个包含两个整数的数组,每个整数的大小为1个字节。

现在我们已经澄清了这一点,让我们参考手边的实际问题。

一般编码问题:

  1. 在每次打印结束时添加空格或换行符'\ n'。

  2. 您必须在函数'main'的末尾返回一个值(您可能只返回0)。

  3. 在最后两次调用'printf'时,将参数强制转换为'float',因为默认情况下编译器可能会将其“发送”为'double',在这种情况下'printf'会将8-处理为字节值为4字节值,您很可能会得到不正确的打印输出。

  4. 更正的代码:

    #include<stdio.h>
    #include<stdlib.h>
    int  main()
    {
        char content[]={0x24,0x00};
        int i;
        for(i=0;i<2;i++)
        {
            printf("%d\n",content[i]);
            printf("%.1f\n",(float)(content[i]/10.0));
        }
        printf("%.2f\n",(float)((100*(unsigned)content[0]+(unsigned)content[1])/1000.0));
        return 0;
    }
    

    话虽如此,我不确定为什么你根本没有得到任何印刷品......