我一直在用Java编写网络库的端口,这是我尚未解释并继续进行的最后一行代码。代码行如下:
Float.floatToIntBits(Float);
返回一个整数。
Java中的floatToIntBits代码
public static int floatToIntBits(float value) {
int result = floatToRawIntBits(value);
// Check for NaN based on values of bit fields, maximum
// exponent and nonzero significand.
if ( ((result & FloatConsts.EXP_BIT_MASK) ==
FloatConsts.EXP_BIT_MASK) &&
(result & FloatConsts.SIGNIF_BIT_MASK) != 0)
result = 0x7fc00000;
return result;
}
我对内存和十六进制值的经验还不够丰富,无法将其移植到自己身上,更不用说让我发疯的整个地方的转变。
最佳答案
如果可以使用unsafe
进行编译,这将变得很简单:
public static unsafe uint FloatToUInt32Bits(float f) {
return *((uint*)&f);
}
如果要使用带符号的值,请用
uint
替换int
,但是我想说unsigned更为合理。实际上,这等效于Java的floatToRawIntBits()
; floatToIntBits()
是相同的,除了它总是为所有NaN
值返回相同的位掩码。如果您需要该功能,则可以从Java版本复制该if
语句,但这可能不是必需的。您需要为程序集启用“不安全”支持,因此,是否要走这条路完全取决于您。高性能网络库使用不安全的代码并不少见。
关于java - C#等效于Java的Float.floatToIntBits,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26394616/