byte[] 的 切割与组合

巫妖天下 2014-08-27 05:26:21
跟C语言的童鞋搞一个东西,需要这样弄。。才能符合他的规则。。。求大神帮助


//假设我有一个已知的a
byte[] a = { 1,2,3,4,5,6,7,8,9 };

//规则是这样,每隔4个我要加“ 后面长度,0,0,0}
//目标是搞成 b

byte[] b = { 4, 0, 0, 0, 1, 2, 3, 4, 4, 0, 0, 0, 5, 6, 7, 8, 1, 0, 0, 0, 9 };

//我应该怎么弄。。。最好敲点代码提醒一下


...全文
652 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
生财 2014-08-29
  • 打赏
  • 举报
回复
有点明白楼主的意思了 他们的协议是头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));
tanta 2014-08-28
  • 打赏
  • 举报
回复
用linq,或者循环自己做,都不复杂。 不过你们这个协议确实。。。
mjp1234airen4385 2014-08-28
  • 打赏
  • 举报
回复
我就是个打酱油的。
asia217 2014-08-28
  • 打赏
  • 举报
回复
ls的不错,
於黾 2014-08-28
  • 打赏
  • 举报
回复
你应该揍他一顿 都什么破规则 协议做的太烂了
angel6709 2014-08-28
  • 打赏
  • 举报
回复
threenewbee 2014-08-27
  • 打赏
  • 举报
回复
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 请按任意键继续. . .
asia217 2014-08-27
  • 打赏
  • 举报
回复
可以吧函数里面的4 写成参数,但是调用之前要判断参数不能为0,除数不能为0,,代码还有可以优化的地方,暂时能满足你使用
asia217 2014-08-27
  • 打赏
  • 举报
回复
  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);
巫妖天下 2014-08-27
  • 打赏
  • 举报
回复
?求指导。。
bigbaldy 2014-08-27
  • 打赏
  • 举报
回复
用List随便你插
巫妖天下 2014-08-27
  • 打赏
  • 举报
回复
现在不明白如何 在一个 byte[] 里插入 x,0,0,0 ....

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧