有人可以告诉我是否有任何代码将浮点数转换为十六进制格式?
对于Ex:float num = 70.482,十六进制函数应返回428CF6C9。
如果之前已经有任何代码,请联系我。
干杯。
答案 0 :(得分:16)
你可以自己写一下:
float x;
const unsigned char * pf = reinterpret_cast<const unsigned char*>(&x);
for (size_t i = 0; i != sizeof(float); ++i)
{
// ith byte is pf[i]
// e.g. printf("0x02X ", pf[i]);
}
事实上,你可以这样做来获得任何(标准布局*)变量的二进制表示。
*)谢谢,@ R。 Martinho Fernandes!
如果您决定在long double
(或者更确切地说,80位扩展精度浮点数)上尝试此操作,请注意它只有10个字节,但在x86 / x64上分别填充为12或16
答案 1 :(得分:3)
CString Class::FloatToHex(float* yourfloat)
{
unsigned char ch[4];
Cstring output;
memcpy(ch,yourfloat,sizeof(float));
output.Format("%X%X%X%X",ch[3],ch[2],ch[1],ch[0]);
return output;
}
答案 2 :(得分:2)
考虑:
union float_bits {
unsigned int i;
float f;
} bits;
将浮点数分配到bits.f
,然后将整数解释为无符号整数,并使用bits.i
读取它。通过这样做,浮点表示字节将保持不变,并且不会像将float指定给int类型变量那样进行隐式类型转换。在这种情况下,我们假设整数的大小与float的大小相同。
或者你可以这样做:
float f;
char *c = (char *) &f;
然后访问f
到c[index]
的各个字节。
答案 3 :(得分:1)
float f = 70.482f;
int i = *(reinterpret_cast<int*>(&f));
printf("%08x\n", i);
答案 4 :(得分:1)
您可以使用union
:
union FloatToChar {
float f;
char c[sizeof(float)];
};
FloatToChar x;
x.f = 10.42f;
for (size_t i=0; i<sizeof(float); i++)
printf( "%X", x.c[i] );
你也可以反过来这样做。
答案 5 :(得分:-1)
只需使用sprintf():http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/
例如,
char out[8];
float myFloat = 70.482;
sprintf(out,"%X",myFloat);