Question

I have my own D6 pas library with crypto functions. Today I tried to use it under XE3, and I found many bugs in it because of unicode. I tried to port to AnsiString, but I failed on chr(nnn) which was 8 bit limited under Delphi6.

I'm trying to explain the problem:

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

Str - string; AStr - ansistring.

When the hchar was 216 (diamater), then AStr changed to "O", what is Ascii 79... And I lost the original value at this moment.

Is there any function for Ansi Chr? For example: "AChr(xxxx)"

Or I need to change my code to not use Strings in the inner section, only bytes and later convert these bytes to AnsiString?

Thanks for any suggestion, help, info!

dd

Was it helpful?

Solution

You can write AnsiChar(SomeOrdinalValue) to make an AnsiChar with a specific ordinal. So your code should be:

AStr := AnsiChar(hchar);

The problem with the code in the question is that you converted to UTF-16 and back.

It would seem to me that strings are the wrong type for your crypto code. Use a byte array, TBytes.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top