找到下一个不同的事件

Find the Next Different Occurrence

本文关键字:事件 下一个      更新时间:2023-10-16

在我的项目中,我经常需要检查QByteArray的下一个字节是否不同。因此,在一个包含999个零和1个非零字节的数组中,我想找到第一个不为零的字节的索引。

通常,我会循环遍历每个字节,直到找到一个不为零的字节。但是,由于indexOf只查找给定值的下一个出现,是否存在与indexOf完全相反的类似函数?

性能时间是我这样做的原因。我做了很多这样的循环只是为了找到第一个无关字节。有没有办法在不循环遍历每个字节的情况下更快地完成同样的工作?

如果你有一个相同字节的统一数组,只有一些是不同的,你可以通过转换你的数组指针(qint64*)或(qint32*)来获得很大的性能提升,这取决于你的机器,并且通过数组的步骤快八到四倍。

qint64 * foo = (qint64*)byteArray.data();

完成

这样,要检查的1024个字节将分解为128个qint64比较或256个qint32比较,以找到要检查的字节集,以找到实际不同的字节。

的例子:

0000 0000 0000 0000 0100

第18位的不同字节

如果你使用qint32,你需要四个步骤(取决于你如何启动搜索)来发现qint32与另一个不同,因为它的值不是0。

这个或类似的方法可以帮助您加快搜索速度。