Blog. Just Blog

Конвертирование юникодных числовых символов в цифры

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Предположим, ваше приложение работает с числами, полученными от пользователя через текстовые поля ввода. Почти со стопроцентной вероятностью это будут привычные нам цифры 0..9, но теоретически в строке ввода могут оказаться юникодные символы из национальных алфавитов, обозначающие цифры. Например, на деванагари (꣑꣒꣓), арабском (٤٥٦) или саураштра (꣗꣘꣙).

Преобразование таких национальных символов в привычные нам цифры легко выполняется одной единственной функцией FoldString. FASM не в курсе о существовании нужного нам флага MAP_FOLDDIGITS, так что придется обозначить его самостоятельно. В остальном никаких сложностей.
  1. buff    rw 100h
  2. num     rw 100h
  3. MAP_FOLDDIGITS = 128
  4.         ...
  5.         ...
  6.         ...
  7.         ; Получить строку из поля ввода
  8.         invoke  GetDlgItemText,[hwnddlg],ID_TXT,buff,100h
  9.  
  10.         ; Сконвертировать юникодные числовые символы в цифры
  11.         invoke  FoldString,MAP_FOLDDIGITS,buff,-1,num,100h
Преобразуются только символы, соответствующие цифрам, все прочие остаются без изменений. После преобразования строки ваше приложение может продолжить работу с нормализованными пользовательскими данными. Вряд ли это вам когда-нибудь понадобится на практике, но все-таки будет полезно узнать.

В приложении пример программы, которая конвертирует юникодные числовые символы в привычные нам цифры. С исходником аккуратнее, открывайте его только в редакторе, который поддерживает юникод.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Unicode.Digits.Demo.zip (2,246 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 1349 | Комментариев: 0

Метки: Assembler
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2025
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0061 сек.) / Память: 4.5 Mb
Наверх