我正在从一个大端的二进制流中读取。BitConverter 类自动执行此操作。不幸的是,我需要的浮点转换与 BitConverter.ToSingle(byte[]) 不同,所以我有自己的同事的例程。但输入 byte[] 需要采用 little-endian。有没有人有一种快速的方法来转换字节 [] 数组的字节顺序。当然,我可以交换每个字节,但必须有一个技巧。谢谢。
问问题
10965 次
3 回答
4
这是一种快速更改字节数组中单曲字节序的方法:
public static unsafe void SwapSingles(byte[] data) {
int cnt = data.Length / 4;
fixed (byte* d = data) {
byte* p = d;
while (cnt-- > 0) {
byte a = *p;
p++;
byte b = *p;
*p = *(p + 1);
p++;
*p = b;
p++;
*(p - 3) = *p;
*p = a;
p++;
}
}
}
于 2009-10-21T20:23:49.033 回答
3
我使用 LINQ:
var bytes = new byte[] {0, 0, 0, 1};
var littleEndianBytes = bytes.Reverse().ToArray();
Single x = BitConverter.ToSingle(littleEndianBytes, 0);
您也可以随心所欲.Skip()
,.Take()
或者在 BitConverter 方法中使用索引。
于 2010-03-18T22:54:04.443 回答
0
你同事的例行公事是什么样的?如果它显式访问字节,您可以更改代码(或者更确切地说,为大端数据创建单独的方法)而不是反转字节。
于 2009-10-21T20:12:47.630 回答