· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Как сравнивать UNICODE-строки

Посл.отвђт Сообщен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