首页 > 解决方案 > 将字节数组转换为一定长度的数组段

问题描述

我有一个字节数组,我想返回一定大小的顺序块(以新字节数组的形式)。

我试过了:

originalArray = BYTE_ARRAY
var segment = new ArraySegment<byte>(originalArray,0,640); 
byte[] newArray = new byte[640];
for (int i = segment.Offset; i <= segment.Count; i++)
{
newArray[i] = segment.Array[i];
}

显然,这只从原始数组创建了一个前 640 个字节的数组。最终,我想要一个遍历前 640 个字节并返回这些字节数组的循环,然后遍历下一个 640 个字节并返回一个 THOSE 字节数组。这样做的目的是向服务器发送消息,每条消息必须包含 640 个字节。我不能保证原始数组长度可以被 640 整除。

谢谢

标签: c#arraysloopssplitbyte

解决方案


如果速度不是问题

var bytes = new byte[640 * 6];

for (var i = 0; i <= bytes.Length; i+=640)
{
   var chunk = bytes.Skip(i).Take(640).ToArray();
   ...
}

或者你可以使用

跨度

Span<byte> bytes = arr; // Implicit cast from T[] to Span<T>

...

slicedBytes = bytes.Slice(i, 640);

块复制

请注意,这可能是 3 个中最快的

var chunk = new byte[640]
Buffer.BlockCopy(bytes, i, chunk, 0, 640);

推荐阅读