|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 19, 2003 13:44:01 Есть ли для этого какие-нибудь функции. И еще вопрос, как получить длину unicode-строки в символах, а не в байтах, как тут PUNICODE_STRING str = L"abc"; int len = str->Length; |
|
|
Дата: Дек 19, 2003 14:12:33 nike winapi lstrcmpW - сравнить lstrlenW - длина |
|
|
Дата: Дек 19, 2003 16:47:39 · Поправил: hello_world Есть ли для этого какие-нибудь функции Зачем? mov esi,offset string1 mov edi,offset string2 push sizeof maxstring pop ecx rep cmpsb jz _sovpali На вызов функции больше байт уйдет :) На ассемблере пишем всетаки :) как получить длину unicode-строки в символах, а не в байтах ; ecx - size mov edi,offset string - 1 xor ecx,ecx xor al,al inc ecx inc edi scasb jnz $ - 3 dec ecx |
|
|
Дата: Дек 19, 2003 16:54:36 hello_world - ты не прав. По кр. мере по повоу длины - т.к. вначале unicode строки частенько ещё есть признак unicode-ности: 0xfeff |
|
|
Дата: Дек 19, 2003 17:18:43 По-моему, проще вызвать апишные функции, как сказал q_q. Для большинства случаев это лучше и НАДЁЖНЕЕ. Не думаю, что это будет длиннее по коду, чем самому обрабатывать строки. Уж точно не как у hello_world. Если уж мы сравниваем строки, в которых на символ уходит по 2 байта, то стоит применять cmpsw. По крайней мере времени так уйдёт меньше. |
|
|
Дата: Дек 20, 2003 10:42:46 Правка Можно "подсмотреть" как сама система сравнивает строки, вытащить этот код и хорошенько оптимизировать (если требуется). А потом включить этот код в masm32.lib… |
|
|
Дата: Дек 20, 2003 12:10:41 Если под НТ, то ntdll.dll экспортирует стандартные: wcscmp wcsncmp _wcsicmp _wcsnicmp Например сравнить две unicode-строки без учета регистра символов. invoke _wcsicmp, addr s1, addr s2 wcslen возвращает длину unicode-строки именно в символах. ntdll.inc и ntdll.lib можно взять в KmdKit. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.109 |