将float转换为32位十六进制C++

Neo*_*ile 5 c++ visual-c++

有没有人可以告诉我是否有任何代码将浮点数转换为十六进制格式?

对于Ex:float num = 70.482,十六进制函数应返回428CF6C9.

如果之前已经有任何代码,请联系我.

干杯.

Ker*_* SB 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]);
}
Run Code Online (Sandbox Code Playgroud)

实际上,您可以这样做以获取任何(标准布局*)变量的二进制表示.

*)谢谢,@ R.Martinho Fernandes!

如果您决定在long double(或更确切地说,80位扩展精度浮点数)上尝试此操作,请注意它只有10个字节,但分别在x86/x64上填充为12或16.

  • 通过从 0 到 3 循环,您可以将结果从左向右翻转!您将得到“C9F68C42”,而不是“428CF6C9”。 (2认同)

Mic*_*ael 4

像这样的东西是我使用的 floattohex 转换.. (它还执行位交换,如果您不需要它,请将其取出)

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是做出了危险且未经检查的假设“sizeof(float)”不超过 4,否则会浪费你的内存吗? (3认同)