哪种方法是将byte[]转换为float[]或反之,最快的方式(当然不需要循环)?
我现在正在使用BlockCopy,但需要双倍的内存。我想要一种类似于类型转换的方法。
我需要进行此转换只是为了通过套接字发送数据,并在另一端重构数组。
我现在正在使用BlockCopy,但需要双倍的内存。我想要一种类似于类型转换的方法。
我需要进行此转换只是为了通过套接字发送数据,并在另一端重构数组。
更多关于.NET中浮点类型的信息在这里:http://csharpindepth.com/Articles/General/FloatingPoint.aspx
[StructLayout(LayoutKind.Explicit)]
struct UnionArray
{
[FieldOffset(0)]
public Byte[] Bytes;
[FieldOffset(0)]
public float[] Floats;
}
static void Main(string[] args)
{
// From bytes to floats - works
byte[] bytes = { 0, 1, 2, 4, 8, 16, 32, 64 };
UnionArray arry = new UnionArray { Bytes = bytes };
for (int i = 0; i < arry.Bytes.Length / 4; i++)
Console.WriteLine(arry.Floats[i]);
}
IEnumerable<float> ToFloats(byte[] bytes)
{
for(int i = 0; i < bytes.Length; i+=4)
yield return BitConverter.ToSingle(bytes, i);
}
如果您可以访问LINQ,则有两种方法:
var floatarray = ByteArry.AsEnumerable.Cast<float>().ToArray();
或者只是使用数组函数
var floatarray = Array.ConvertAll(ByteArray, item => (float)item);