-----------如何定位特定byte数据在byte[]数组中的位置?-------------

雄牛 2017-08-15 10:44:22
主要是用来分析socket自定义传输的协议的,
由于封装的传输包含文件名,文件时间,文件大小,文件内容(由流转成的byte[])..
而且文件名和内容都不是固定的,
但有特定的拼接符
除文件内容外,其它的都可以取出来,
但是现在,我想直接截取文件内容byte[]转存成文件,大小是知道的

请问如何像string.indexof类似这样定位特定bytge字符在整个byte[]数组中的位置?



//前后字符
byte[] arrFront = Encoding.Default.GetBytes("File-Content:[");
byte[] arrEnd = Encoding.Default.GetBytes("]\r\n\t" + "\0\0\0\0\0\0\0\0\0\0");

//整个接收到的Socket数据
byte[] arrMsgRec;

如何定位arrFront 在arrMsgRec中的位置,返回一个位置数字?

...全文
1140 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣如花 2017-08-15
  • 打赏
  • 举报
回复
我也觉得改协议会比较好 包头指定文件名长度和文件长度,都是int定长的,你按字节取就好了
白三儿 2017-08-15
  • 打赏
  • 举报
回复
我觉得可以用SelectedIndex写啊 int h=ss.SelectedIndex //设一个数组下坐标 if(ss[h]==特定字符) { 输出 }
雄牛 2017-08-15
  • 打赏
  • 举报
回复
OK ,解决了.. // <summary> /// 定位指定的 System.Byte[] 在此实例中的第一个匹配项的索引。 /// </summary> /// <param name="srcBytes">源数组</param> /// <param name="searchBytes">查找的数组</param> /// <returns>返回的索引位置;否则返回值为 -1。</returns> public static int ByteIndexOf(byte[] srcBytes, byte[] searchBytes) { if (srcBytes == null) { return -1; } if (searchBytes == null) { return -1; } if (srcBytes.Length == 0) { return -1; } if (searchBytes.Length == 0) { return -1; } if (srcBytes.Length < searchBytes.Length) { return -1; } for (int i = 0; i < srcBytes.Length - searchBytes.Length; i++) { if (srcBytes[i] == searchBytes[0]) { if (searchBytes.Length == 1) { return i; } bool flag = true; for (int j = 1; j < searchBytes.Length; j++) { if (srcBytes[i + j] != searchBytes[j]) { flag = false; break; } } if (flag) { return i; } } } return -1; }
cheng2005 2017-08-15
  • 打赏
  • 举报
回复
如果你不会定协议,那么就随便找几个通讯协议参考一下。 常见的协议制定方式是包头+包体,包头多半是定长的,用来描述包体的信息。 而数据文件的存储结构也和这种协议类似,有文件头,用来描述文件内容信息。 你这种在数据里找数据的数据的做法,不知道是你自己脑洞大开,还是谁胡乱指挥的结果。
cheng2005 2017-08-15
  • 打赏
  • 举报
回复
如果你不会定协议,那么就随便找几个通讯协议参考一下。 常见的协议制定方式是包头+包体,包头多半是定长的,用来描述包体的信息。 而数据文件的存储结构也和这种协议类似,有文件头,用来描述文件内容信息。 你这种在数据里找数据的数据,不知道是你自己脑洞大开,还是谁胡乱指挥的结果。
_小黑_ 2017-08-15
  • 打赏
  • 举报
回复
双方通信 还是 有协议比较好
一品梅 2017-08-15
  • 打赏
  • 举报
回复
只要能解决问题就好。
xian_wwq 2017-08-15
  • 打赏
  • 举报
回复
自定义协议包是比较常用也是比较稳妥的方法 通过特殊字符搜索,会出现在小概率情况下,数据刚好与特殊字符重合,从而导致解析异常

111,097

社区成员

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

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

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