如何将float转换为字节数组,然后将字节数组重新转换为float而不使用BitConverter?
提前致谢。
答案 0 :(得分:2)
如果byte[]
的字节顺序与float
的字节顺序相同:
[StructLayout(LayoutKind.Explicit)]
public struct UInt32ToSingle
{
[FieldOffset(0)]
public uint UInt32;
[FieldOffset(0)]
public float Single;
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
[FieldOffset(2)]
public byte Byte2;
[FieldOffset(3)]
public byte Byte3;
}
public static float FromByteArray(byte[] arr, int ix = 0)
{
var uitos = new UInt32ToSingle
{
Byte0 = arr[ix],
Byte1 = arr[ix + 1],
Byte2 = arr[ix + 2],
Byte3 = arr[ix + 3],
};
return uitos.Single;
}
public static byte[] ToByteArray(float f)
{
byte[] arr = new byte[4];
ToByteArray(f, arr, 0);
return arr;
}
public static void ToByteArray(float f, byte[] arr, int ix = 0)
{
var uitos = new UInt32ToSingle { Single = f };
arr[ix] = uitos.Byte0;
arr[ix + 1] = uitos.Byte1;
arr[ix + 2] = uitos.Byte2;
arr[ix + 3] = uitos.Byte3;
}
请注意,我对UInt32ToSingle
结构做了一点作弊,就像C联盟一样。我使用它从各种byte
转换为float
(struct
的字段占据内存中的相同位置,感谢FieldOffset
)。
使用示例:
byte[] b = ToByteArray(1.234f);
float f = FromByteArray(b); // 1.234f