Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 31-08-2010 19:36 » |
|
существует ли аналог функции strstr для поиска в массиве байтов, с куазанием длины массива и без реагирования на 0 ?
Рылся в интернете, не нашёл...
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #1 : 31-08-2010 20:45 » |
|
|
|
« Последнее редактирование: 31-08-2010 20:50 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 31-08-2010 20:53 » |
|
эхъ, жалко. Спасибо. А я, кстати, уже свою накатал - очень похоже получилось const BYTE* CScanner::st_findInBuf(const BYTE* pBuff,DWORD dwdBuffLen,const BYTE* pSub,DWORD dwdSubSetLen) { if(!pBuff)return 0; if(!pSub)return 0; if(!dwdBuffLen)return 0; if(!dwdSubSetLen)return 0;
const BYTE* pBuff_end=pBuff+dwdBuffLen; if(pBuff_end<=pBuff)return 0;
const BYTE* pCurr=pBuff;
while( pCurr<pBuff_end && (pCurr=(const BYTE*)memchr(pCurr,*pSub,pBuff_end-pCurr)) ) { if( ((DWORD)(pBuff_end-pCurr)) < dwdSubSetLen )return 0;
if(0==memcmp(pCurr,pSub,dwdSubSetLen))return pCurr;
pCurr++; }
return 0; }
|
|
« Последнее редактирование: 31-08-2010 21:10 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #3 : 31-08-2010 20:55 » |
|
Леш, посмотри по ссылке первые позиции - там есть исходники.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 31-08-2010 20:57 » |
|
да, я успел даже в посте их увидеть )
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #5 : 31-08-2010 20:57 » |
|
Я его прибил, т.к. поиск дает несколько вариантов. Тот что я привел и убрал был сделан для BCB, а это не есть гуд - у них свой диалект C++.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 31-08-2010 21:00 » |
|
Дык, мне исходники как бы и не надо, я сам факт искал. Если нету - я напишу свой (уже написал)
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 01-09-2010 04:52 » |
|
Скорость мне особо не надо. Мельком глянул - они там как-то на строке зациклились, а файл - отнюдь не строка, оканчивающаяся нулём )
|
|
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #9 : 01-09-2010 04:54 » |
|
терминирующий 0 это частность
|
|
|
Записан
|
Странно всё это....
|
|
|
RXL
|
|
« Ответ #10 : 01-09-2010 06:41 » |
|
Какой еще терминирующий ноль? Ведь задается длина обеих массивов!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 01-09-2010 06:47 » |
|
можно для некого ускорения ещё второй символ тоже сравнить, но, сдаётся, это не сильно скажется )
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 10-09-2010 16:25 » |
|
а вот мне тут подсказали, самое оно )) #include <algorithm>
const char by1[10]={0,1,2,3,4,5,6,7,8,9}; const char by2[3]={2,3,4}; const char* p=std::search(by1,by1+sizeof(by1),by2,by2+sizeof(by2));
|
|
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #13 : 13-09-2010 07:00 » |
|
я и забыл про него
|
|
|
Записан
|
Странно всё это....
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 13-09-2010 07:12 » |
|
а я искал нечто подобное в algorithm, но сам не нашёл тогда. Всё find пытал ))
|
|
|
Записан
|
|
|
|
|