Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字节数组转换为浮点32位和64位?_C#_Bit Manipulation_Bitconverter - Fatal编程技术网

C# 将字节数组转换为浮点32位和64位?

C# 将字节数组转换为浮点32位和64位?,c#,bit-manipulation,bitconverter,C#,Bit Manipulation,Bitconverter,如何将字节数组中的4个字节转换为32位浮点?那么,对于64位浮点(双精度)的字节数组中的8个字节,您将如何执行相同的操作?我注意到C#中的BitConverter类有这个,但是我对它背后的数学很好奇 我目前已经编写了很多字节转换函数,不过仅仅使用BitConverter类而不是我自己的函数会更有效吗?通常使用BitConverter函数会更有效,尽管在某些情况下(例如,将两个字节转换为一个短字节)如果编写内联移位和/或操作,代码速度会快得多 如果有疑问,请使用秒表插入代码,并为发布版本计时。这是

如何将字节数组中的4个字节转换为32位浮点?那么,对于64位浮点(双精度)的字节数组中的8个字节,您将如何执行相同的操作?我注意到C#中的BitConverter类有这个,但是我对它背后的数学很好奇


我目前已经编写了很多字节转换函数,不过仅仅使用BitConverter类而不是我自己的函数会更有效吗?

通常使用
BitConverter
函数会更有效,尽管在某些情况下(例如,将两个字节转换为一个短字节)如果编写内联移位和/或操作,代码速度会快得多

如果有疑问,请使用秒表插入代码,并为发布版本计时。这是唯一知道的方法,真的

但是,如果您处理的是值数组,那么使用
Buffer.BlockCopy
将整个数组从一种类型转换为另一种类型会更快、更容易(但以牺牲内存空间为代价)

例如,您可以将一个双精度数组复制到一个字节数组,然后按如下方式进行复制:

double[] original = {1.0, 2.0, 3.0, 4.0, 5.0};
int byteCount = sizeof(double) * original.Length;

byte[] asBytes = new byte[byteCount];
Buffer.BlockCopy(original, 0, asBytes, 0, byteCount);

double[] copied = new double[original.Length];
Buffer.BlockCopy(asBytes, 0, copied, 0, byteCount);

foreach (double d in copied)
    Console.WriteLine(d);

这可能更适合您的特定场景。与以往一样,您需要进行一些仔细的计时,以确保它是否有用。

我正在编写服务器程序,因此我不确定在可能有许多连接和数据包进出的情况下使用块复制功能是否是一个好主意。不过,位转换器似乎对我有一些问题。最主要的一个问题是我不能用to string函数指定字符串的长度。那么我该如何手动将位转换为32/64位浮点?@user3519915字符串与此有什么关系?解释位转换器功能不足的简单示例。@user3519915我不明白-位转换器用于将值类型转换为字节数组或从字节数组转换为值类型。转换为字符串或从字符串转换为字符串格式和解析,这是一个不相关的概念。