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