C#将int数组转换为byte数组
在C里面很简单,直接使用指针强制转换一下就OK,C#也支持指针,直接想到用指针转。代码如下
public static unsafe byte[] IntArrToByteArr(int[] intArr) { byte[] bytArr = new byte[sizeof(int) * intArr.Length]; //使用int指针指向int数组,强制转换为byte指针,逐个元素赋值给byte数组即可。 fixed (int* pInt = intArr) { byte* pByte = (byte*)pInt; for (int i = 0; i < bytArr.Length; i++) { bytArr[i] = pByte[i]; } } return bytArr; }
以上代码需要启用unsafe编译选项支持。
还有一种思路是使用Marshal.Copy()方法将int数组复制到非托管指针,再从非托管指针复制回byte数组,在不启用unsafe代码的情况下这种做法比较常见,熟悉平台调用的肯定都很熟悉System.Runtime.InteropServices.Marshal这个类下面的方法。
public static byte[] IntArrToByteArr(int[] intArr) { int intSize = sizeof(int) * intArr.Length; byte[] bytArr = new byte[intSize]; //申请一块非托管内存 IntPtr ptr = Marshal.AllocHGlobal(intSize); //复制int数组到该内存块 Marshal.Copy(intArr, 0, ptr, intArr.Length); //复制回byte数组 Marshal.Copy(ptr, bytArr, 0, bytArr.Length); //释放申请的非托管内存 Marshal.FreeHGlobal(ptr); return bytArr; }
还有两种思路是,分别将单个int值转换成byte数组,再拼起来:
使用System.BitConvert.GetBytes(Int32)方法,将每个int值转换为byte数组,然后把数组按顺序拼起来;
或者是移位运算,计算每个int值占用的4字节空间单个字节的值,得到4个byte值,生成byte数组。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。