如何显示浮点值的编码

我们如何在C中打印浮点值的编码? 我知道我可以使用%A ,但这不是我想要的格式。

例如,如果我的值是1.3416407,我想打印“0x3FABBAE2”,我不是“0X1.5775C4P + 0”。

你可以使用联盟,例如

 #include  #include  union { float f; uint32_t i; } u; uf = 1.3416407f; printf("%#X\n", ui); 

@Paul R提出的工会理念很好,但会受益于改进

 union { float f; uint32_t i; } u; uf = 1.3416407f; printf("0x%08" PRIX32 "\n", ui); 

这确保打印8个hex字符,根据需要填充零。 如果它与sizeof(int)不同,它也匹配sizeof(ui)。

虽然它确实应该受到不常见的sizeof(float)!= sizeof(uint32_t);

要打印任意事物的hex表示,请使用

 union { arbitrary object; unsigned char bytes[sizeof (arbitrary)]; } u; 

 union { float object; unsigned char bytes[sizeof (float)]; } u; u.object = 1.3416407f; printf("0x"); for (size_t i = 0; i < sizeof(u.bytes); i++) { printf("%02hhx", u.bytes[i]); } printf("\n"); 

或者反转小端的字节:

 printf("0x"); for (size_t i = sizeof(u.bytes) - 1; i < sizeof(u.bytes); i--) { printf("%02hhx", u.bytes[i]); } printf("\n"); 

上面的代码假设CHAR_BIT == 8

您可以通过八位字节走八位字节:

 float f = 1.3416407; unsigned char *fp = (void *)&f; size_t i; printf("0x"); for (i = 0; i < sizeof(float); ++i) { printf("%02X", fp[i]); } puts(""); 

您可能需要根据所需的字节顺序以相反的顺序打印八位字节。