在我的项目中,我经常需要检查QByteArray
以查找不同的下一个字节。所以在一个包含999个零和1个非零字节的数组中,我想找到第一个字节的索引,它不是零。
通常,我会遍历每个字节,直到找到一个不为零的字节。但是因为indexOf只是找到给定值的下一次出现,是否有与indexOf完全相反的类似函数?
表演时间是我这样做的原因。我做了很多这些循环只是为了找到第一个无关紧要的字节。有没有什么方法可以更快地完成同样的操作而不只是循环遍历每个字节?
答案 0 :(得分:0)
如果你有一个相同字节的统一数组,只有一些是不同的,你可以通过转换(qint64 *)或(qint32 *)中的数组指针(取决于你的机器)和步骤八或四次来大大提高性能通过阵列更快。
这是由qint64 * foo = (qint64*)byteArray.data();
这样,要检查的1024个字节将熔化为128个qint64比较或256个qint32比较,以找到更接近查找实际不同字节的字节集。
示例:
<00> 0000 0000 0000 0000 0100第18位的不同字节
如果你使用qint32,你需要四个步骤(取决于你如何启动搜索)来找到qint32与另一个不同,因为它的值不是0.
这种或类似的方法可以帮助您加快搜索速度。