0

我需要序列化一堆floats 并在必要时转换为小端。我知道BitConverter.GetBytes(float),但我宁愿避免在 GC 堆上分配大量的 4 字节小数组。如何转换为byte[]具有偏移索引的现有大数组?我想要类似的东西:

float[] theFloats; // filled up somewhere
byte[] theBytes = new byte[theFloats.Length * 4];

int offset = 0;
for (int i = 0; i < numFloats; ++i)
{
    MagicClass.CopyFloatToBytes(theFloats[i], theBytes, offset);
    offset += 4;
}
4

2 回答 2

1

您可以MemoryStream在数组周围创建一个,然后创建一个BinaryWriter并将浮点数写入它。

于 2012-12-13T22:29:45.613 回答
1

为什么不直接使用BitConverter.GetBytes

你也可以这样做[StructLayout(LayoutKind.Explicit)]

[StructLayout(LayoutKind.Explicit)]
public struct Convert32BitType
{
    [FieldOffset(0)]
    public int Int32Value;
    [FieldOffset(0)]
    public float FloatValue;
}

// Example:
var tmp = new Convert32BitType();
tmp.FloatValue = 1.1;
int ival = tmp.Int32Value;
byte b1 = (byte)(ival >> 24);
byte b2 = (byte)(ival >> 16);
byte b3 = (byte)(ival >> 8);
byte b4 = (byte)(ival >> 0);

另一种可能性是使用fixed关键字并转换指针,但这需要不安全的代码。

于 2012-12-13T23:52:39.407 回答