【问题标题】:Convert float to int bitwise without casting将浮点数按位转换为整数而不进行强制转换
【发布时间】:2016-08-05 00:14:03
【问题描述】:

我正在尝试对一组浮点数进行校验和。因此我想将它们按位转换为整数。有什么快速的方法可以不自己操作字节吗?

【问题讨论】:

  • 好的,谢谢!实际上,floatToIntBits() 和 floatToRawIntBits() 有什么区别? NaN 的处理?
  • 是的,如果实际数字代表NaN 值,那么这两种方法返回不同的值。 floatToIntBits() 为所有可能的 NaN 值返回相同的规范值,而 floatToRawIntBits() 返回不同的值,具体取决于实际的 float NaN 值。

标签: java


【解决方案1】:

您可以使用Float.floatToRawIntBits() 获得float 的内部按位表示。然后您可以使用返回的int 创建校验和:

int checksum = 0;
for (float value : floatArray) {
  checksum += Float.floatToRawIntBits(value);
}

根据您的用例,您还可以使用Float.floatToIntBits(),它为所有NaN 值返回规范值0x7fc00000

至于校验和计算本身,我采用了最简单的方法,即对值求和。有更好的校验和算法,它们对特定的翻转位模式更健壮——一旦你有了int 值,你就可以将它们与你喜欢的任何校验和算法一起使用(CRC、MD5、SHA2 或其他东西)。

有关详细信息,请参阅示例

【讨论】:

  • 我建议使用乘数来创建一个简单的散列。但这确实有效 +1
猜你喜欢
  • 2023-03-10
  • 2021-07-30
  • 2014-03-01
  • 2011-10-25
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多