byte[] 的 切割与组合 现在不明白如何 在一个 byte[] 里插入 x,0,0,0 .... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); 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请按任意键继续. . . 用linq,或者循环自己做,都不复杂。不过你们这个协议确实 有点明白楼主的意思了他们的协议是头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)); 求winform 基于多线程的例子 大家主菜单一般放在什么窗体上 如何实现以只读方式打开word文档 关于web上水晶报表的问题 一个控制多行TEXTBOX文本颜色的问题!!!!懂的进来解决下!!!先谢了!!! 一个异步调用的问题 300分,,,来人呢,老板要砍人啦!!!急,在线等。。。。消息队列问题。。。思归。。 C#中如何判断NUM INS CAPS键有没有按下? 编译时if语句条件符合时为什么还要检查else语句呢? C# webapi 与wcf 优缺点对比 项目文件太大 F5起来非常慢 咋办 Form中添加定义控件后,再次打开项目并Form设计时,vs直接关闭掉
{
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);
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
请按任意键继续. . .
不过你们这个协议确实
他们的协议是头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));