将二维 int 数组转换为字节数组

Sha*_*han -2 c# arrays byte type-conversion


我想将二维 int 数组转换为字节数组。最简单的方法是什么?
例子:

int[,] array = new int[2, 2] { { 2, 1 }, { 0, 1 } };
Run Code Online (Sandbox Code Playgroud)

我怎样才能转换array为a byte[]?在您的答案中,请同时包含与之相反的函数。(如果有一个函数可以将 an 转换int[,]为 a byte[],请告诉我如何将 a 转换byte[]为 an int[,]
如果您问自己为什么我需要这样做:我需要通过int[,]TCP 客户端将 a 发送到服务器,那么向客户端发送响应
PS:我考虑创建一个[Serializeable]类,其中包含int[,],然后将该类序列化为一个文件并发送该文件,在服务器端我将反序列化该文件并从那里获取数组。但我认为这需要更多的资源才能做到这一点,然后将其转换为byte[].
感谢您的帮助!:)

Ser*_*-Tm 5

简短回答:Buffer.BlockCopy

public static byte[] ToBytes<T>(this T[,] array) where T : struct
{
  var buffer = new byte[array.GetLength(0) * array.GetLength(1) * System.Runtime.InteropServices.Marshal.SizeOf(typeof(T))];
  Buffer.BlockCopy(array, 0, buffer, 0, buffer.Length);
  return buffer;
}
public static void FromBytes<T>(this T[,] array, byte[] buffer) where T : struct
{
  var len = Math.Min(array.GetLength(0) * array.GetLength(1) * System.Runtime.InteropServices.Marshal.SizeOf(typeof(T)), buffer.Length);
  Buffer.BlockCopy(buffer, 0, array, 0, len);
}
Run Code Online (Sandbox Code Playgroud)