现在不明白如何 在一个 byte[] 里插入 x,0,0,0  ....

解决方案 »

  1.   

      byte[] getbytes(byte[] bytes)
            {
                try
                {
                    var remainder = bytes.Count() % 4;  //1
                    var divtime = bytes.Count() / 4;  //2
                    if (remainder != 0)
                    {
                        var lstbytes = new List<byte[]>();
                        for (int i = 0; i < divtime; i++)
                        {
                            var bys = bytes.Skip(i * 4).Take(4).ToArray();
                            var b = new byte[] { 4, 0, 0, 0 };
                            lstbytes.Add(b);
                            lstbytes.Add(bys);
                        }
                        var tmpBytes = bytes.Skip(divtime * 4).Take(remainder).ToArray();
                        var otherbytes = new byte[] { (byte)tmpBytes.ToList().Count(), 0, 0, 0 };
                        lstbytes.Add(otherbytes);
                        lstbytes.Add(tmpBytes);
                        return lstbytes.SelectMany(P => P).ToArray();
                    }
                    else
                    {
                        var lstbytes = new List<byte[]>();
                        for (int i = 0; i < divtime; i++)
                        {
                            var tmpbys = bytes.Skip(i * 4).Take(4).ToArray();
                            var otherbytes = new byte[] { 4, 0, 0, 0 };
                            lstbytes.Add(otherbytes);
                            lstbytes.Add(tmpbys);
                        }
                        return lstbytes.SelectMany(P => P).ToArray();
                    }
                }
                catch (Exception ex)
                {
                    return new byte[] { };
                }
            }
      byte[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
                var targetbytes = getbytes(a);
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                byte[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
                byte[] result = a.Select((x, i) => new { x, i })
                    .GroupBy(x => x.i / 4)
                    .SelectMany(x => new byte[] { (byte)x.Count(), 0, 0, 0 }.Concat(x.Select(y => y.x)))
                    .ToArray();
                Console.WriteLine(string.Join(", ", result.Select(x => x.ToString())));
            }
        }
    }4, 0, 0, 0, 1, 2, 3, 4, 4, 0, 0, 0, 5, 6, 7, 8, 1, 0, 0, 0, 9
    请按任意键继续. . .
      

  3.   

    用linq,或者循环自己做,都不复杂。
    不过你们这个协议确实
      

  4.   

    有点明白楼主的意思了
    他们的协议是头4字节长度,
    这个很好整,用list 先添加长度
    再将协议体添加进去.
    List<byte> vvv = new List<byte>(300);
    //长度
    vvv.AddRange(BitConverter.GetBytes(4))
    //协议体
    vvv.AddRange(a.Skip(0).Take(4));
    //协议二
    vvv.AddRange(BitConverter.GetBytes(4))
    //协议体
    vvv.AddRange(a.Skip(4).Take(4));