2013-06-05 5 views
3

암호 기능이있는 D6 PAS 라이브러리가 있습니다. 오늘 XE3에서 사용하려고했는데 유니 코드 때문에 많은 버그를 발견했습니다. AnsiString으로 포팅을 시도했지만, Delphi6에서 8 비트로 제한된 chr (nnn)에서 실패했습니다.Delphi XE3 : Chr Ansi 버전?

내가 문제를 설명하기 위해 노력하고있어 :

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

str을 - 문자열; AStr - ansistring.

hchar가 216 (입체 음향) 일 때 AStr이 "O"로 변경되면 Ascii 79는 무엇입니까 ... 그리고이 순간 원래 값을 잃었습니다.

Ansi Chr에는 어떤 기능이 있습니까? 예 : "AChr (xxxx)"

또는 내부 섹션에서 문자열을 사용하지 않고 바이트 만 변경하고 나중에이 바이트를 AnsiString로 변환해야합니다.

의견, 도움, 정보 주셔서 감사합니다!

DD

+1

암호화는 문자가 아닌 약 바이트입니다. Delphi 6에서 바이트 구조 (바이트 배열)로 코드가 작동하는지 확인하십시오 (DUnit과 같은 테스트 프레임 워크를 사용하여 정확성을 확인하십시오). 그런 다음 코드를 최신 Delphi 버전으로 이식하십시오. –

답변

4

당신은 AnsiChar(SomeOrdinalValue) 특정 순서가있는 AnsiChar를 만들기 위해 쓸 수 있습니다. 따라서 코드는 다음과 같아야합니다.

AStr := AnsiChar(hchar); 

문제의 코드와 관련된 문제는 UTF-16으로 변환했기 때문입니다.

문자열 코드가 암호화 코드에 잘못된 유형 인 것처럼 보일 것입니다. 바이트 배열 TBytes을 사용하십시오.

+0

+1에 대한 'TBytes' –