c# - 将 int 位转换为 float 位

标签 c# bit-manipulation

我正在创建一个缓冲区,该缓冲区将在横幅中读/写,我可以在其中完全消除 TCP 分段带来的问题。我遇到的唯一问题是 float 变量,除了 float 之外,其他一切都很好。我找不到有关如何将 int32 位转换为 float 的任何信息。

当把一个float转换成int位时,使用了下面的方法(直接从java的源代码中提取出来,然后转换)

private int floatToIntBits(float value)
{
    int result = BitConverter.ToInt32(BitConverter.GetBytes(value), 0);
    if (((result & 0x7F800000) == 0x7F800000) && (result & 0x80000000) != 0)
        result = 0x7fc00000;
    return result;
}

但是,现在我需要做相反的事情,不幸的是,BitConverter 类中没有任何函数可以使用 float。

我也无法在 JavaDocs 中找到很多信息,我个人无法使用,您可以找到信息 here .

最佳答案

令人烦恼的是,如果您使用的是 doublelong,则有 BitConverter.DoubleToInt64BitsBitConverter.Int64BitsToDouble .我真的不知道为什么没有 Single/Int32 等价物,因为它迫使你在堆上创建一个毫无意义的 byte[] (它甚至不允许您传入预先存在的缓冲区)。

如果您乐于使用不安全代码,您实际上可以在一个简单的数据转换中完成所有操作,无需任何方法调用或数组:

public static unsafe int SingleToInt32Bits(float value) {
    return *(int*)(&value);
}
public static unsafe float Int32BitsToSingle(int value) {
    return *(float*)(&value);
}

关于c# - 将 int 位转换为 float 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27237776/

相关文章:

c - 可变长度霍夫曼码的比特流 - 如何写入文件?

c# - 将 C# 转换为 C++ 按位移位

c++ - 为什么这个 int-to-binary 尝试失败超过 16,我该如何清理它?

c# - 使用 MARC 文件

c# - 页脚中的 ClientScript.RegisterStartupScript

powershell - PowerShell 2.0 中的位移位

c++ - 将 std::string 复制到 7 位 ASCII 内存

c# - 在C#winforms中通过动态代码执行不同namspace的方法

c# - 调试前运行批处理脚本

c# - Foreach while 一个值与前一个值相同