QByteArray 分割成若干个若干个数组的问题

振星 2015-01-06 03:37:56
有二进制文件 如下,
e225 093f cc04 003f 0000 0373 d9f4 028e 0246 e225 093f cc04 003f 0000 0373 d9f4 028e 0246 00 00 00 00 e225 093f cc04 003f 0000 0373 d9f4 028e 0246 00 22 22 22 e225 093f cc04 003f 0000 0373 d9f4 028e 0246 e225 093f cc04 003f 0000 0373 d9f4 028e 0246 e225 093f cc04 003f 0000 0373 d9f4 028e 0246 e225 093f cc04 003f 0000 0373 d9f4 028e 0246 e225 093f cc04 003f 0000 0373 d9f4 028e 0246


均是以e2 25 作为一行数据的标识开始 后面跟的长度若干

现在我通过QFile 的readAll 将之都赋值到QByteArray 中,此时我想对这些二进制解析,首要要分割成若干个以e225开始的小的QByteArray,以0xe225开始到下一个0xe225前。请问应该如何处理?
在线等。谢谢


...全文
3924 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlexBein 2018-12-20
  • 打赏
  • 举报
回复
spil 可以整体以E2 25分割,把E2 25 转成10进制,即可
qq_19984279 2016-04-09
  • 打赏
  • 举报
回复
楼上,请问你是怎样优化算法的,能否给一下相关的代码,感谢至极啊!
振星 2015-01-09
  • 打赏
  • 举报
回复
引用 3 楼 IBM123 的回复:
参考:

	QByteArray bytes;

	QByteArray find("\xe2\x25", 2);
	
	QList<QByteArray> list;

	int idx = 0, from = find.length();

	while((idx = bytes.indexOf(find, from)) != -1) 
	{
		list << bytes.mid(from, idx);

		from = idx + find.length();
	} 
借用了您的思路解决了,不过效率上比较低,大概50M的文件至少需要5s,后来我优化了算法。 非常感谢
ibm123 2015-01-07
  • 打赏
  • 举报
回复
参考:

	QByteArray bytes;

	QByteArray find("\xe2\x25", 2);
	
	QList<QByteArray> list;

	int idx = 0, from = find.length();

	while((idx = bytes.indexOf(find, from)) != -1) 
	{
		list << bytes.mid(from, idx);

		from = idx + find.length();
	} 
振星 2015-01-07
  • 打赏
  • 举报
回复
引用 1 楼 foruok 的回复:
调用split方法试试。
spilt只能分割一个字节 比如E2 或者25 不能整体以E2 25分割
donwmufromdying 2015-01-07
  • 打赏
  • 举报
回复
个人觉得你还是先转成二进制的QByteArray然后处理更方便。 QByteArray hexbytes = readFromFile(.....); QByteArray binData= QByteArray::fromHex(hexbytes);
foruok 2015-01-06
  • 打赏
  • 举报
回复
调用split方法试试。

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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