Поиск строки в ByteArray. Это простое решение для этого? - PullRequest
0 голосов
/ 03 октября 2011

Как проще всего найти вхождение некоторой последовательности байтов (строки) в массив длинных байтов?

заранее спасибо !!

UPD: Я пытался сделать

my_byte_array.toString().indexOf(needle_string);

проблема заключается в том, что во флэш-памяти строка состоит из utf8 символов, поэтому indexOf будет возвращать значение, отличное от смещения "строки" в байтовом массиве (на самом деле это zip-архив)

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Предполагая, что массив достаточно длинный, что вы не хотите преобразовывать его в строку, я думаю, что я просто укушу пулю и сделаю что-то вроде этого:

function byteArrayContainsString
  (haystack : ByteArray, needleString : String) : Boolean
{
  const needle : ByteArray = new ByteArray

  needle.writeUTFBytes(needleString)

  return byteArrayIndexOf(haystack, needle) !== -1
}

function byteArrayIndexOf
  (haystack : ByteArray, needle : ByteArray) : int
{
  search: for (var i : int = 0; i < haystack.length; ++i) {
    for (var j : int = 0; j < needle.length; ++j)
      if (haystack[i + j] !== needle[j])
        continue search

    return i
  }

  return -1
}
1 голос
/ 03 октября 2011

Я полагаю, что это будет работать:

//needle_string is the sequence you want to find
my_byte_array.toString().indexOf(needle_string);

Это вернет -1, если последовательность не найдена, и в противном случае индекс, по которому последовательность была найдена.

...