问题:
已知一个byte[],现在需要按要求分割成多个byte[].
1.分割个数为n
2.分割格式为:前31个字节固定,第32~33中2个字节表示后面字节个数(short)。表述可能有点困难,请看图示:已知的byte[]格式:
|____31_____|_2_|_____x_____|____31_____|_2_|_____y_____|____31_____|_2_|_____y_____|... ...要分割成n个(此处为3个):
|____31_____|_2_|_____x_____|
|____31_____|_2_|_____y_____|
|____31_____|_2_|_____z_____|其中x,y,z的值(即长度)保存在|_2_|中,通过BitConverter.ToInt16获取。
已知一个byte[],现在需要按要求分割成多个byte[].
1.分割个数为n
2.分割格式为:前31个字节固定,第32~33中2个字节表示后面字节个数(short)。表述可能有点困难,请看图示:已知的byte[]格式:
|____31_____|_2_|_____x_____|____31_____|_2_|_____y_____|____31_____|_2_|_____y_____|... ...要分割成n个(此处为3个):
|____31_____|_2_|_____x_____|
|____31_____|_2_|_____y_____|
|____31_____|_2_|_____z_____|其中x,y,z的值(即长度)保存在|_2_|中,通过BitConverter.ToInt16获取。
那就用List<byte>,一直Insert就行了
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication31
{
class Program
{
static void Main(string[] args)
{
List<Byte> Bytes = new List<Byte>(); Bytes.AddRange(Encoding.Default.GetBytes("31个固定值"));
Bytes.AddRange(Encoding.Default.GetBytes("02"));
Bytes.AddRange(Encoding.Default.GetBytes("12")); Bytes.AddRange(Encoding.Default.GetBytes("31个固定值"));
Bytes.AddRange(Encoding.Default.GetBytes("02"));
Bytes.AddRange(Encoding.Default.GetBytes("34")); Bytes.AddRange(Encoding.Default.GetBytes("31个固定值"));
Bytes.AddRange(Encoding.Default.GetBytes("03"));
Bytes.AddRange(Encoding.Default.GetBytes("567")); Bytes.AddRange(Encoding.Default.GetBytes("31个固定值"));
Bytes.AddRange(Encoding.Default.GetBytes("02"));
Bytes.AddRange(Encoding.Default.GetBytes("89")); Bytes.AddRange(Encoding.Default.GetBytes("31个固定值"));
Bytes.AddRange(Encoding.Default.GetBytes("01"));
Bytes.AddRange(Encoding.Default.GetBytes("0")); for (int i = 0; i < Bytes.Count; )
{
String S = "31个固定值";
i += Encoding.Default.GetByteCount("31个固定值"); int Len = Convert.ToInt32(((char)Bytes[i]).ToString() + ((char)Bytes[i + 1]).ToString(), 16); // 假设长度是16进制存放的
i += 2; for (int j = i; j < i + Len; j++)
S += ((char)Bytes[j]).ToString();
i += Len; Console.WriteLine(S);
}
Console.Read();
}
}
}
1.先把你得到的这个[]在循环外赋值给临时[]
2.遍历[]
3.在循环取出第一段,然后抛弃,然后把剩下的重新赋值给你的临时[]
循环代码参考:byte[] bRecord = bRecords;
for(int i = 0;i < iRecordsCount;i++)
{
int iStartIndex = 31+2 + BitCoverter.ToInt16(bRecord,31);
byte[] bARecord = new byte[iStartIndex];
//截取前面的[]放到一个Array里去
***
// 获取后面的[]赋值给bRecord
}
这样在最后Array中就是已经分割好了的[]了!