【发布时间】:2014-04-25 07:45:46
【问题描述】:
如何将字节数组中的 4 个字节转换为 32 位浮点数?那么对于 64 位浮点数(双精度),您将如何对字节数组中的 8 个字节执行相同操作?我注意到 C# 中的 BitConverter 类有这个,但是我很好奇它背后的数学。
我目前已经编写了很多字节转换函数,但使用 BitConverter 类而不是我自己的函数会更有效吗?
【问题讨论】:
标签: c# bit-manipulation bitconverter
如何将字节数组中的 4 个字节转换为 32 位浮点数?那么对于 64 位浮点数(双精度),您将如何对字节数组中的 8 个字节执行相同操作?我注意到 C# 中的 BitConverter 类有这个,但是我很好奇它背后的数学。
我目前已经编写了很多字节转换函数,但使用 BitConverter 类而不是我自己的函数会更有效吗?
【问题讨论】:
标签: c# bit-manipulation bitconverter
使用BitConverter 函数通常会更有效,但在某些情况下(例如,将两个字节转换为短字节),如果您编写内联移位和或操作,代码会快得多。
如有疑问,请使用 Stopwatch 检测代码并为发布构建计时。只有这样才能知道,真的。
但是,如果您正在处理 数组 值,那么使用 @987654323 将整个数组从一种类型转换为另一种类型会更快更容易(但会占用内存空间) @。
例如,您可以将双精度数组复制到字节数组并返回如下:
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);
这可能更适合您的特定场景。与以往一样,您需要仔细安排时间来确定它是否有用。
【讨论】: