Перекодировка строк из одной кодировки в другуюDelphi , Синтаксис , ПреобразованияПерекодировка строк из одной кодировки в другую
Автор: Default { **** UBPFD *********** by delphibase.endimus.com **** >> перекодировка строк из одной кодировки в другую // функция CodeConversion служит для перекодировки строки символов из // одной кодировки в другую кодировку; // параметры: SourceStr - исходная строка для перекодировки, // VectorCodeConv - вектор перекодировки; // Result - перекодированная строка; // Написана как альтернатива функции ConvertEncoding @VEG-а // Быстрее как минимум - приблизительно в 4 раза, // как максимум - приблизительно в 18 раз // (минимум - когда первый параметр перед передачей в подпрограмму // преобразовывается из типа String к типу PChar + результат // преобразовывается из типа PChar в тип String; // максимум - когда нет никаких преобразований String в PChar и обратно) Зависимости: Нет Автор: default Copyright: default(+VEG@-ие вектора перекодировок) Дата: 3 ноября 2003 г. ***************************************************** } function CodeConversion(const SourceStr, VectorCodeConv: PChar): PChar; asm // Вход: SourceStr --> EAX, VectorCodeConv --> EDX // Выход: Result --> EAX PUSH EBX XOR ECX, ECX XOR EBX, EBX @@Go: TEST BYTE PTR [EAX + ECX], -1 JZ @@Exit MOV BL, BYTE PTR [EAX + ECX] MOV BL, BYTE PTR [EDX + EBX - 1] MOV BYTE PTR [EAX + ECX], BL INC ECX JMP @@Go @@Exit: POP EBX end; Пример использования: var S: PChar; begin S := CodeConversion(CodeConversion('Тест!', cmAnsiToKoi8R), cmKoi8RToAnsi) end; Функция конвертации кодировки Приведенная функция Delphi называется Описание функции Функция использует ассемблерный код для выполнения конвертации. Она проходит по каждому символу в исходной строке, получает его байтовое значение, находит соответствующее байтовое значение в векторе кодов и хранит его обратно в исходной строке. Преимущества Согласно комментариям, это реализация работает быстрее функции Пример использования Пример использования демонстрирует, как использовать функцию Сигнатура функции
Ассемблерный код Ассемблерный код отвечает за выполнение фактической конвертации. Он использует следующие регистры:
Код проходит по каждому символу в исходной строке, получает его байтовое значение, находит соответствующее байтовое значение в векторе кодов и хранит его обратно в исходной строке. Конвертационный процесс повторяется, пока все символы не будут обработаны. Ограничения Хотя эта реализация обеспечивает значительный ускорение, она имеет некоторые ограничения:
Предложения по улучшению Чтобы улучшить это код, рассмотрите следующие предложения:
В статье описана функция CodeConversion для перекодировки строк из одной кодировки в другую, написанная на языке Delphi и использующая ассемблерный код. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Преобразования ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |