繁体   English   中英

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

[英]Converting float to 32-bit hexadecimal C++

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

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

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

干杯。

你可以自己简单地写一下:

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。

像这样的东西是我使用的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;
}

考虑:

union float_bits {
    unsigned int i;
    float f;
} bits;

将浮点数分配给bits.f ,然后将整数解释为无符号整数,并使用bits.i读取它。 通过这样做,浮点表示字节将保持不变,并且不会像将float指定给int类型变量那样进行隐式类型转换。 在这种情况下,我们假设整数的大小与float的大小相同。

或者你可以这样做:

float f;
char *c = (char *) &f;

然后通过c[index]访问f的各个字节。

float f = 70.482f;
int i = *(reinterpret_cast<int*>(&f));
printf("%08x\n", i);

你可以使用一个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] );

你也可以反过来这样做。

只需使用sprintf(): http//www.cplusplus.com/reference/clibrary/cstdio/sprintf/

例如,

char out[8];
float myFloat = 70.482;
sprintf(out,"%X",myFloat);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM