C# - 我可以使用数组初始值设定项从另一个字节数组构建一个字节数组吗?

标签 c# byte arrays array-initialization

我想使用数组初始值设定项从另一个字节数组以及形成标题/尾部的一些其他字节构建一个字节数组。基本上,我想做这样的事情:

byte[] DecorateByteArray(byte[] payload)
{
    return new byte[] { 0, 1, 2, payload.GetBytes(), 3, 4, 5};
}
不幸的是,上面的

GetBytes() 是虚构的。

有什么好的/优雅的方法可以做到这一点吗?我解决了这个问题,方法是使用 BinaryWriter 将所有内容写入 MemoryStream,然后使用 MemoryStream.ToArray() 将其转换为字节数组,但感觉有点笨重。

最佳答案

你能得到的最接近的是:

byte[] DecorateByteArray(byte[] payload) =>
    new byte[] { 0, 1, 2 } 
       .Concat(payload)
       .Concat(new byte[] { 3, 4, 5 })
       .ToArray();

虽然这样效率很低。你最好做这样的事情:

static T[] ConcatArrays<T>(params T[][] arrays)
{
    int length = arrays.Sum(a => a.Length);
    T[] ret = new T[length];
    int offset = 0;
    foreach (T[] array in arrays)
    {
        Array.Copy(array, 0, ret, offset, array.Length);
        offset += array.Length;
    }
    return ret;
}

(适当时也考虑使用 Buffer.BlockCopy。)

然后调用它:

var array = ConcatArrays(new byte[] { 0, 1, 2 }, payload, new byte[] { 3, 4, 5 });

关于C# - 我可以使用数组初始值设定项从另一个字节数组构建一个字节数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127394/

相关文章:

c# - #Region 内的 Resharper 7 : Sort Method by name,

c# - 听到 "element ' 行为“具有无效的子元素”应该被忽略,但因此无法更新服务引用

c# - 按钮上的动画单击xamarin表单

java - 设置字节中的特定位

java - 字节方法中可能从 int 到字节错误的有损转换

C# Silverlight 获取声音的频率

python - 连接/附加不同大小的多个垂直数组

delphi - char 数组的 D2009 问题 - 我如何 `elegantly` 修复我的代码?

c++ - 创建一个子类 vector ?

c# - 仅显示 DateTime 中的日期