2013-06-05 3 views
3

У меня есть собственная библиотека D6 pas с функциями криптографии. Сегодня я пытался использовать его под XE3, и я нашел много ошибок в нем из-за unicode. Я попытался подключиться к AnsiString, но я потерпел неудачу в chr (nnn), который был ограничен 8 бит под Delphi6.Delphi XE3: версия Chr Ansi?

Я пытаюсь объяснить проблему:

Str := chr(hchar); 
    AStr := Str; 

Str - строка; AStr - ansistring.

Когда hchar был 216 (diamater), тогда AStr изменился на «O», что такое Ascii 79 ... И я потерял первоначальное значение в данный момент.

Есть ли какая-либо функция для Ansi Chr? Например: «AChr (xxxx)»

Или мне нужно изменить свой код, чтобы не использовать строки во внутреннем разделе, только байты, а затем преобразовать эти байты в AnsiString?

Спасибо за любое предложение, помощь, информацию!

дд

+1

Шифрование - это байты, а не символы. Сначала убедитесь, что ваш код работает с структурами байтов (массивы байтов) в Delphi 6 (для проверки правильности используйте структуру тестирования, такую ​​как DUnit). Затем переносите свой код на более новые версии Delphi. –

ответ

4

Вы можете написать AnsiChar(SomeOrdinalValue) сделать AnsiChar с определенным порядковым номером. Так что ваш код должен быть:

AStr := AnsiChar(hchar); 

Проблема с кодом в вопросе является то, что вы преобразованы в UTF-16 и обратно.

Мне кажется, что строки для вашего криптокода не соответствуют типу. Используйте массив байтов, TBytes.

+0

+1 для 'TBytes' –