如何将长整型数组转换为字节数组?

3
数据来自程序外部,因此长数组必须转换为字节数组。如何高效地进行转换?此外,是否有一种选择转换类型为小端或大端的方法?

1
你的意思是源数组中的每个long都应该变成目标数组中的8个字节吗?(并且转换过程应该能够处理不同的字节序?) - LukeH
@baraban....数据是一个长数组还是只是一个长整型? - MikeTWebb
1
请给出一个明确的例子,说明给定输入会产生什么输出。 - Gabe
1个回答

5

您可以按照以下方式将long数组转换为byte数组:

bool isLittleEndian = true;
byte[] data = new byte[longData.Length * 8];
int offset = 0;
foreach (long value in longData) {
  byte[] buffer = BitConverter.GetBytes(value);
  if (BitConverter.IsLittleEndian != isLittleEndian) {
    Array.Reverse(buffer);
  }
  buffer.CopyTo(data, offset);
  offset += 8;
}

这通常已经足够高效了。如果你需要更快的速度,你可以在不安全的代码块中使用指针。


你认为如果输入数组是小端字节序,使用未托管的 memcpy 是可能的吗?是否有关于如何做到这一点的示例? - baraban
1
@baraban:如果源和目标的字节序相同,您可以使用非托管块复制。 - Guffa
@baraban:是的,那似乎可以用。 - Guffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接