C# 就地将 `int[]` 数组转换为 `byte[]` 数组
Posted
技术标签:
【中文标题】C# 就地将 `int[]` 数组转换为 `byte[]` 数组【英文标题】:C# in-place cast `int[]` array to `byte[]` array 【发布时间】:2022-01-11 02:04:27 【问题描述】:我有一个某种类型的数组(short[]
、int[]
或类似的基本类型)。我想通过流发送它,所以我需要它是byte[]
。标准解决方案似乎是创建一个新的byte[]
数组,并使用BitConverter
。这种方法的问题在于性能和内存使用 - 它需要分配所有新内存,复制到新内存中,然后将 byte[]
写入流。
我非常想将int[]
数组的原始后备内存用作byte[]
数组,以便我可以就地发送它。为了这个非常明显和非常显着的性能差异,我愿意强制要求发送和接收系统必须是相同的字节序。
有没有办法将int[]
或类似的数组作为byte[]
就地处理?
【问题讨论】:
***.com/a/66983061 如果Span<T>
不可用,请记住,如果您正在写入流,则不必一次转换整个数组,您可以逐块进行。它不会为您节省处理周期,但不会花费您太多的内存
【参考方案1】:
如果可以使用Span<T>
(.net core 3+):
void Send(int[] data)
ReadOnlySpan<byte> byteRef = MemoryMarshal.AsBytes(data.AsSpan());
_stream.Write(byteRef);
【讨论】:
这是个好消息,感谢您的回复!我现在正在阅读Span<T>
,我需要弄清楚如何在接收端从byte[]
转换回int[]
。如果您碰巧在我找到它之前发布它,将不胜感激。
在接收端,只需创建另一个int[]
,并从中创建一个Span<byte>
,并将_stream.Read()
放入span。十分简单。 :-D以上是关于C# 就地将 `int[]` 数组转换为 `byte[]` 数组的主要内容,如果未能解决你的问题,请参考以下文章
c# 中如何把 string 类型如何转换为uint类型啊?