【问题标题】:C# in-place cast `int[]` array to `byte[]` arrayC# 就地将 `int[]` 数组转换为 `byte[]` 数组
【发布时间】:2022-01-11 02:04:27
【问题描述】:

我有一个某种类型的数组(short[]int[] 或类似的基本类型)。我想通过流发送它,所以我需要它是byte[]。标准解决方案似乎是创建一个新的byte[] 数组,并使用BitConverter。这种方法的问题在于性能和内存使用 - 它需要分配所有新内存,复制到新内存中,然后将 byte[] 写入流。

我非常想将int[] 数组的原始后备内存用作byte[] 数组,以便我可以就地发送它。为了这个非常明显和非常显着的性能差异,我愿意强制要求发送和接收系统必须是相同的字节序。

有没有办法将int[] 或类似的数组作为byte[] 就地处理?

【问题讨论】:

  • 如果Span<T> 不可用,请记住,如果您正在写入流,则不必一次转换整个数组,您可以逐块进行。它不会为您节省处理周期,但不会花费您太多的内存

标签: c# arrays .net serialization casting


【解决方案1】:

如果可以使用Span<T>(.net core 3+):

void Send(int[] data)
{
    ReadOnlySpan<byte> byteRef = MemoryMarshal.AsBytes(data.AsSpan());
    _stream.Write(byteRef);
}

【讨论】:

  • 这是个好消息,感谢您的回复!我现在正在阅读Span&lt;T&gt;,我需要弄清楚如何在接收端从byte[] 转换回int[]。如果您碰巧在我找到它之前发布它,将不胜感激。
  • 在接收端,只需创建另一个int[],并从中创建一个Span&lt;byte&gt;,并将_stream.Read() 放入span。十分简单。 :-D
猜你喜欢
  • 2018-08-31
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2014-03-02
  • 2020-02-03
  • 1970-01-01
相关资源
最近更新 更多