将int位转换为float位

业余爱好者

我正在创建一个将在横幅中读/写的缓冲区,在其中我可以完全消除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中找到很多信息,也没有我个人可以使用的信息,您可以在此处找到信息

马克·格雷韦尔

令人讨厌的是,如果您使用的是doubleand long,则有BitConverter.DoubleToInt64Bitsand BitConverter.Int64BitsToDouble我真的不知道为什么不存在Single/Int32等效项,因为它迫使您byte[]在堆上创建无意义的对象(它甚至不让您传递预先存在的缓冲区)。

如果您愿意使用unsafe代码,则实际上可以通过简单的数据处理来完成所有操作,而无需任何方法调用或数组:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将int(32位)转换为char(8位)

来自分类Dev

如何在Swift中将Int位模式转换为Float?

来自分类Dev

将位转换为Int8 Haskell

来自分类Dev

将int转换为16位无符号short

来自分类Dev

将位转换为int会返回负值

来自分类Dev

将int转换为2位有效数字

来自分类Dev

将int转换为64位架构

来自分类Dev

将int转换为16位无符号短整数

来自分类Dev

将Int值转换为位值以进行网格显示

来自分类Dev

将24位带符号的int信号转换为16位带符号的int信号

来自分类Dev

Python:如何将32位带符号长整数转换为7位int

来自分类Dev

如何将64位int转换为32位PowerPC上的浮点数?

来自分类Dev

将11位十六进制值转换为有符号的32位int

来自分类Dev

PHP将24位颜色转换为4位

来自分类Dev

将位图转换为1位位图

来自分类Dev

使用alpha将8位PNG转换为32位

来自分类Dev

将8位值转换为24位值

来自分类Dev

PHP将24位颜色转换为4位

来自分类Dev

将32位数字转换为16位或更少

来自分类Dev

Java将8位数字转换为10位

来自分类Dev

将char强制转换为4位的位字段项

来自分类Dev

将 128 位转换为 8 位 C# 数组

来自分类Dev

将 Excel 宏从 32 位转换为 64 位

来自分类Dev

将Float转换为Int

来自分类Dev

将float转换为int

来自分类Dev

将32位TGA转换为PNG

来自分类Dev

将位域转换为数组

来自分类Dev

将整数矩阵转换为位串?

来自分类Dev

将棋盘转换为位掩码