问题描述
C#/.NET应用程序编程开发中,当前有三个字节数组(byte[]),现需要将其合并成一个字节数组,C#有哪些实现方式呢?
方案一
使用System.Buffer.BlockCopy()
方法合并多个字节数组,如下:
byte[] rv = new byte[a1.Length + a2.Length + a3.Length];
System.Buffer.BlockCopy(a1, 0, rv, 0, a1.Length);
System.Buffer.BlockCopy(a2, 0, rv, a1.Length, a2.Length);
System.Buffer.BlockCopy(a3, 0, rv, a1.Length + a2.Length, a3.Length);
方案二
使用LINQ的Concat()
方法合并字节数组,如下:
IEnumerable<byte> rv = a1.Concat(a2).Concat(a3);
方案三
如果是不确定的个数的字节数组,则可以封闭成通用的合并的方法,如下:
private byte[] Combine(params byte[][] arrays)
{
byte[] rv = new byte[arrays.Sum(a => a.Length)];
int offset = 0;
foreach (byte[] array in arrays) {
System.Buffer.BlockCopy(array, 0, rv, offset, array.Length);
offset += array.Length;
}
return rv;
}
方案四
使用LINQ的SelectMany()
方法可以让实现方式更简洁,如下:
public static byte[] ConcatByteArrays(params byte[][] arrays)
{
return arrays.SelectMany(x => x).ToArray();
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册