5

我正在从一个大端的二进制流中读取。BitConverter 类自动执行此操作。不幸的是,我需要的浮点转换与 BitConverter.ToSingle(byte[]) 不同,所以我有自己的同事的例程。但输入 byte[] 需要采用 little-endian。有没有人有一种快速的方法来转换字节 [] 数组的字节顺序。当然,我可以交换每个字节,但必须有一个技巧。谢谢。

4

3 回答 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 回答