如何在编译时将常量 float 值转换为 4 字节十六进制常量值?
How convert constant float value to 4 bytes hex constant value in compile time?
如何在编译时将常量浮点值转换为十六进制?
在运行时我是这样做的:
int main()
{
union float_to_int
{
float float_;
int int_;
};
printf("43.2 in hex: 0x%X.\n", float_to_int{ 43.2f }.int_);
return 0;
}
如何在编译时执行此操作?我完全迷路了
从广义上讲......你没有。您可能用来完成此操作的任何机制都会调用 UB(您发布的肯定会调用),并且编译时代码中的任何 UB 都被明确定义为格式错误。
好吧,直到 C++20 将 add std::bit_cast
,一个函数可以通过在它们之间执行等效的按字节复制来转换平凡可复制的类型。它被定义为 constexpr
(只要源类型和目标类型适合该操作),因此您可以在编译时进行这些转换。
如何在编译时将常量浮点值转换为十六进制?
在运行时我是这样做的:
int main()
{
union float_to_int
{
float float_;
int int_;
};
printf("43.2 in hex: 0x%X.\n", float_to_int{ 43.2f }.int_);
return 0;
}
如何在编译时执行此操作?我完全迷路了
从广义上讲......你没有。您可能用来完成此操作的任何机制都会调用 UB(您发布的肯定会调用),并且编译时代码中的任何 UB 都被明确定义为格式错误。
好吧,直到 C++20 将 add std::bit_cast
,一个函数可以通过在它们之间执行等效的按字节复制来转换平凡可复制的类型。它被定义为 constexpr
(只要源类型和目标类型适合该操作),因此您可以在编译时进行这些转换。