Der Ordinalwert ist in dem Fall
Byte(Msg[i])
Sorry für die schlechte Beschreibung.
Msg ist ein langer String mit Bytes die über eine
TCP Kommunikation kommen.
Dieser String enthält Steuerzeichen und Klartext als Bytes. Ich durchlaufe den kompletten
String und ignoriere alle Steuerzeichen und wandle die einzelne Byte in Char um. Die besagten
Special characters sind nicht in der CodePage wo sie eigentlich sein sollen.
Das 'ü' ist also nicht auf $FC sondern auf $81 alle andere Zeichen bis auf die Special characters
sind am richtigen Platz.
Aktuell hab ich zwei Arrays eines Array of Byte mit den 13 Byte werten und eines Array of AnsiChar
Ich durchlaufe für jedes Byte(Msg[i]) das komplette Array of Byte und wenn das Byte vorkommt habe ich den
Index für das zwei Array of AnsiChar und hole mir einfach das Char heraus.
Das wollte ich verbessern. Die Absicht ist, das Array of Byte mit den 13 Einträgen nicht für jedes Byte(Msg[i]) durchlaufen zu müssen.
Jetzt habe ich eine Lösung gefunden. Muss ich morgen noch genau testen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type TSpecialCharacters = array[Byte] of AnsiChar;
var SpecialCharacters:TSpecialCharacters;
begin
SpecialCharacters[$5B] := '[';
SpecialCharacters[$5C] := '\';
SpecialCharacters[$5D] := ']';
SpecialCharacters[$7B] := '{';
SpecialCharacters[$7C] := '|';
SpecialCharacters[$7D] := '}';
SpecialCharacters[$7E] := '~';
SpecialCharacters[$8E] := 'Ä';
SpecialCharacters[$99] := 'Ö';
SpecialCharacters[$9A] := 'Ü';
SpecialCharacters[$84] := 'ä';
SpecialCharacters[$94] := 'ö';
SpecialCharacters[$81] := 'ü';
SpecialCharacters[$E1] := 'ß';
Label1.caption := SpecialCharacters[$5B];
Label2.caption := SpecialCharacters[$5C];
end;