读取float的字值(十六进制)

说我有一个浮点数,我想得到的单词值为:

float f = 42.0f; // 0xDEADBEEF

我知道两个选择。

  1. 使用
  2. 进行双关
std::cout << *(int*)&f;

这是未定义的行为,我不介意使用char*作为异常(如此处所示:dereferencing type-punned pointer will break strict-aliasing rules),因为浮点数是4个字节,这很麻烦。

  1. 使用工会
union {
    float f;
    int i;
};

f = 42.0f;
std::cout << i;

这也是我上次检查时未定义的行为,尽管此答案不同意: What is the strict aliasing rule?

我是禁用严格别名的唯一选择吗?我认为应该有一种方法可以在不进行较大变化的情况下获得基础价值(如果您好奇的话,我正在计算校验和)。

yangxiong9852 回答:读取float的字值(十六进制)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2556901.html

大家都在问