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

时间:2015-05-27 13:55:13

标签: c# arrays type-conversion byte bytearray


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

int[,] array = new int[2, 2] { { 2, 1 }, { 0, 1 } };

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

2 个答案:

答案 0 :(得分:2)

简短回答: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);
}

答案 1 :(得分:0)

如果您不担心使用不安全的代码,那很简单:

        int[,] array = new int[2, 2];

        //Do whatever to fill the array

        byte[] buffer = new byte[array.GetLength(0) * array.GetLength(1) * sizeof(int)];

        fixed (void* pArray = &array[0,0])
        {
            byte* pData = (byte*)pArray;

            for (int buc = 0; buc < buffer.Length; buc++)
                buffer[buc] = *(pData + buc);

        }