如何将字节数组中的 4 个字节转换为 32 位浮点数?那么对于 64 位浮点数(双精度),您将如何对字节数组中的 8 个字节执行相同操作?我注意到 C# 中的 BitConverter 类有这个,但是我很好奇它背后的数学。
我目前已经编写了很多字节转换函数,尽管只使用 BitConverter 类而不是我自己的函数会更有效吗?
如何将字节数组中的 4 个字节转换为 32 位浮点数?那么对于 64 位浮点数(双精度),您将如何对字节数组中的 8 个字节执行相同操作?我注意到 C# 中的 BitConverter 类有这个,但是我很好奇它背后的数学。
我目前已经编写了很多字节转换函数,尽管只使用 BitConverter 类而不是我自己的函数会更有效吗?
使用这些函数通常会更有效BitConverter
,但在某些情况下(例如,将两个字节转换为短字节),如果您编写内联移位和或操作,代码会快得多。
如果有疑问,请使用Stopwatch
发布版本和时间来检测代码。这是唯一知道的方法,真的。
但是,如果您正在处理值数组,那么使用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);
这可能更适合您的特定场景。与以往一样,您需要仔细安排时间来确定它是否有用。