Найти последовательность байт в байтовом массиве

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Найти последовательность байт в байтовом массиве

Сообщение Antonariy » 16.02.2010 (Вт) 13:11

Какие есть способы кроме перебора побайтно?
Лучший способ понять что-то самому — объяснить это другому.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Найти последовательность байт в байтовом массиве

Сообщение Dmitriy2003 » 17.02.2010 (Ср) 10:28

Antonariy писал(а):кроме перебора

К вопросу о переборе, бывают-ли ситуации когда это не сработает:

Код: Выделить всё
Byte a = someByte, b = someByte;
Int32 eqFlag = a ^ b

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Найти последовательность байт в байтовом массиве

Сообщение Antonariy » 17.02.2010 (Ср) 10:35

Я не понял написанного из-за сишности синтаксиса.
Лучший способ понять что-то самому — объяснить это другому.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Найти последовательность байт в байтовом массиве

Сообщение Dmitriy2003 » 17.02.2010 (Ср) 10:36

^ = XOR

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Найти последовательность байт в байтовом массиве

Сообщение Денис » 17.02.2010 (Ср) 11:40

А Int32 это Long?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Найти последовательность байт в байтовом массиве

Сообщение Dmitriy2003 » 17.02.2010 (Ср) 11:51

Денис писал(а):А Int32 это Long?

Если тебе так удобнее, пусть будет Long, хотя и short достаточно.
Код: Выделить всё
short eqFlag = default(short);

for (short i = 0; i < searchSegment.length; i++)
{
   eqFlag += searchSegment[i] ^ testSegment[i];
}

If (eqFlag==0) return testSegment;

Вопрос наверное повторять ненадо ?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Найти последовательность байт в байтовом массиве

Сообщение Antonariy » 17.02.2010 (Ср) 13:51

Dmitriy2003 писал(а):
Antonariy писал(а):кроме перебора

К вопросу о переборе, бывают-ли ситуации когда это не сработает:

Код: Выделить всё
Byte a = someByte, b = someByte;
Int32 eqFlag = a ^ b
Во-первых, причем тут XOR, во-вторых как он может не сработать?
Лучший способ понять что-то самому — объяснить это другому.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Найти последовательность байт в байтовом массиве

Сообщение Dmitriy2003 » 17.02.2010 (Ср) 13:54

Antonariy писал(а):Во-первых, причем тут XOR

почему-бы и нет :?:
Antonariy писал(а):во-вторых как он может не сработать?

Да я тоже хотел-бы узнать, при определенных условиях мне незвестных возможен ли отказ :?:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Найти последовательность байт в байтовом массиве

Сообщение Antonariy » 17.02.2010 (Ср) 15:32

Dmitriy2003 писал(а):
Antonariy писал(а):Во-первых, причем тут XOR

почему-бы и нет :?:
Уточню: каким образом здесь может быть применим XOR? Не улавливаю.
Dmitriy2003 писал(а):Да я тоже хотел-бы узнать, при определенных условиях мне незвестных возможен ли отказ :?:
Разве что только одно из значений Nothing или Null или вообще не является числом.
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Найти последовательность байт в байтовом массиве

Сообщение Денис » 17.02.2010 (Ср) 15:34

Что-то вы отвлеклись от темы обсуждения. Ксор какой-то... Для дотнета логично предположить метод, привязанный к объекту-массиву, например:
Код: Выделить всё
X.Find ("Criteria")

где Х - это массив байт. Это по логике фреймворка, если я правильно понимаю. (А я могу ошибаться, вы знаете).
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Найти последовательность байт в байтовом массиве

Сообщение Antonariy » 17.02.2010 (Ср) 15:45

Для дотнета логично предположить метод, привязанный к объекту-массиву
И предположил. И проверил. И не подошло. Потому что массивы могут быть не только байтовые, а какие угодно, и привязанный метод требует коллбэк-функцию, умеющую сравнивать элементы.
А еще я умею пользоваться поиском по обозревателю объектов, поэтому другие логичные предположения тоже уже проверил.
Лучший способ понять что-то самому — объяснить это другому.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Найти последовательность байт в байтовом массиве

Сообщение Dmitriy2003 » 17.02.2010 (Ср) 22:29

Мне массивы кажуться не очень удобными, Generic List больше нравиться.
XOR - что-бы сравнивать элементы, и это не панацея, к примеру
List<Byte> практически тотже массив - работает иногда даже быстрее,
так вот если искать байтовую последовательность в массиве или списке
предложенный Денисом метод негодиться поскольку в ячейке массива лежит
один байт (тока не надо усложнять типа Byte[][]...и.т.п.)

значит X.Find("Criteria") - пролетает для - Byte[] myByteArray

Antonariy - писал про перебор - вот я и спросил стоит ли сравнивать
элементы с помощью XOR - получается вложенный цикл, что само-по себе
не очень красиво, но легко для понимания

з.ы.
Что-то толком мысль сформировать не получается (проще бесполезный пример сделать который все объясняет)
Вложения
wfa1.rar
С#-VS2008-NET-FW-2.0 (src+binary)
(29.82 Кб) Скачиваний: 88

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Найти последовательность байт в байтовом массиве

Сообщение Денис » 18.02.2010 (Чт) 11:40

Antonariy писал(а):И предположил. И проверил.
А еще я умею пользоваться поиском по обозревателю объектов, поэтому другие логичные предположения тоже уже проверил.

Я тут в соседнем топике взял с полки пирожок! Хочешь половину?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

    TopList