visual将浮点数转换为32位十六进制的c++
visual Converting float to 32-bit hexadecimal C++
谁能告诉我是否有任何代码将浮点数转换为十六进制格式?
For 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]);
}
实际上,您可以这样做以获得任何 (standard-layout*)变量的二进制表示。
*)谢谢,@R。Martinho费尔南德斯!
如果您决定在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
读取。通过这样做,浮点数表示字节将保持完整,并且不会像将浮点数分配给int类型变量时那样进行隐式类型转换。在本例中,我们假定整型的大小与浮点数的大小相同。
或者你可以这样做:
float f;
char *c = (char *) &f;
然后通过c[index]
访问f
的单个字节。
float f = 70.482f;
int i = *(reinterpret_cast<int*>(&f));
printf("%08xn", 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);
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何在C++中将十六进制字符串转换为文本数据
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- 绝对编码器十六进制输入
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- C++17 十六进制浮点文字单精度后缀冲突?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 打印十六进制字符
- 编译器始终打印十六进制/八进制数字