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数组。



  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值