Перекодировка строк из одной кодировки в другую
Автор: Default
WEB-сайт: http://delphibase.endimus.com
{ **** 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;
|