将int转换为float到hex

Ste*_*ler 6 c floating-point integer floating-point-conversion

使用scanf,输入的每个数字,我希望我的程序打印出两行:例如

byte order: little-endian

> 2
     2 0x00000002
  2.00 0x40000000

> -2
    -2 0xFFFFFFFE
 -2.00 0xC0000000
Run Code Online (Sandbox Code Playgroud)

我可以得到它以十六进制打印2但我也需要一个浮点数当然我不能扫描为一个当我还需要扫描为一个int

如果我在尝试printf时投射为浮动,我会得到一个零.如果我作为浮点扫描我得到正确的输出.我试图将int转换为float,但它仍然是零.

到目前为止这是我的输出

Int - float - hex

byte order: little-endian

>2

         2  0x000002
      2.00  00000000
Run Code Online (Sandbox Code Playgroud)

它看起来像我正在转换为漂浮为什么不打印作为十六进制?如果我作为一个浮点扫描我得到正确的十六进制表示,如第一个例子.这应该是简单的事情.我确实需要以小数形式扫描,记住我在cygwin中运行它

这是我到目前为止...

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{


int HexNumber;
    float convert;
printf("Int - float - hex\n");



int a = 0x12345678;
unsigned char *c = (unsigned char*)(&a);
if (*c == 0x78)
{
    printf("\nbyte order: little-endian\n");
}
else
{
    printf("\nbyte order: big-endian\n");
}

printf("\n>");
scanf("%d", &HexNumber);
printf("\n%10d  ",HexNumber);
printf("%#08x",HexNumber);





convert =  (float)HexNumber; // converts but prints a zero

printf("\n%10.2f  ", convert); 
printf("%#08x", convert); // prints zeros


return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*uen 8

试试这个:

int i = 2;
float f = (float)i;
printf("%#08X", *( (int*) &f ));
Run Code Online (Sandbox Code Playgroud)

[编辑]

@Corey:

让我们从里到外解析它:

&  f = address of f = say address 0x5ca1ab1e
(int*)  &f = interpret the address 0x5ca1ab1e as integer pointer
*  ((int*)&f) = get the integer at address 0x5ca1ab1e
Run Code Online (Sandbox Code Playgroud)

以下更简洁,但很难记住C语言的运算符关联性和运算符优先级(我更喜欢一些添加的括号和空格提供的额外清晰度):

printf("%#08X", *(int*)&f);
Run Code Online (Sandbox Code Playgroud)