假设float a = 12.5;
我知道它的十六进制表示是0×41480000
。但是如何通过程序从float
打印其十六进制表示?
答案 0 :(得分:2)
使用带有指针的类型punning将float视为整数。
float a = 12.5;
long *aint = (long *)&a;
printf("0x%lx\n", *aint);
您也可以只使用强制转换来执行此操作,而不是添加变量:
printf("0x%lx\n", *(long *)&a);
答案 1 :(得分:1)
从C99起,%a
说明符基本上就是这样。它给出了十六进制尾数和指数的表示。这里唯一的障碍是它为double
代替float
,但这不应该打扰你。
答案 2 :(得分:0)
在C中执行此操作的合理方法是使用联合。在C 1999或更高版本中,您可以使用以下表达式执行此操作:
(union { float f; uint32_t u; }) { a } .u
完整的演示程序如下。这要求float
是交换格式的IEEE-754 32位二进制文件,这在现代C实现中很常见。
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
int main(void)
{
float a = 12.5;
printf("%" PRIx32 "\n",
(union { float f; uint32_t u; }) { a } .u);
return 0;
}