我需要在ByteArray
中找到一个字节序列,但是似乎没有任何直接的操作可以这样做。确定ByteArray
中是否存在特定字节序列的最直接方法是什么?
例如,我想使用以下内容捕获序列(或null
)的范围:
val searchArray = arrayOf(0xF1.toByte(), 0xF2.toByte(), 0xF4.toByte(), 0xF8.toByte())
val range = myByteArray.range(of: searchArray)
我也只对起始索引感到满意,因为我一直都知道搜索数组的大小。
答案 0 :(得分:0)
仅添加番石榴就太简单了:
fun ByteArray.findFirst(sequence: ByteArray,startFrom: Int = 0): Int {
if(sequence.isEmpty()) throw IllegalArgumentException("non-empty byte sequence is required")
if(startFrom < 0 ) throw IllegalArgumentException("startFrom must be non-negative")
var matchOffset = 0
var start = startFrom
var offset = startFrom
while( offset < size ) {
if( this[offset] == sequence[matchOffset]) {
if( matchOffset++ == 0 ) start = offset
if( matchOffset == sequence.size ) return start
}
else
matchOffset = 0
offset++
}
return -1
}