Ok, das probier ich gleich.
Übrigens meine ich das mit Casten:
Ich hab mir mal im Hexeditor angeschaut wie diese sogenannten Unicode-Strings da vorzufinden sind. Und da sind sie, wie ich das
hier in meinem dritten Edit versucht habe zu erklären.
Nun habe ich mir das Zahlensystem zur Basis 256 einfach gedacht, und dann geraten ob man von vorne oder hinten durchzählt, also die Richtung (ich meine das ist dann MSB bzw LSB) und folgendes herausgefunden:
Der String "er" ist ja als Byte "101,0,114,0" und dann mit dem Zahlensystem als Grundlage ist =
101*256^0 + 0*256^1 +
114*256^2 + 0*256^3
Dann habe ich diese Funktion geschrieben:
Code: Alles auswählen
function CastUnicodeStringToInteger(str: string): integer;
var
i, r: integer;
begin
r := 0;
for i := 0 to Length(str) - 1 do
r := r + Ord(str[i + 1]) * (256 ** (2 * i));
Result := r;
end;
Und das klappt wie ich mir das vorstelle

, vielleicht habe ich mich einfach nicht klar genug ausgedrückt
Probieren nun einen größeren Block auszulesen,
Dann könnte ich da ja
modulo 256 rechnen um den LSB zu kriegen, also, wie ich ja herausgefunden habe, den ersten Buchstaben..
Edit: Das brauche ich doch garnicht ?! Ich kann doch auch den einfach als Byte deklarieren und dann macht der das automatisch, und zusätzlich spar ich mir Speicher.
Ich probiere es sofort aus!
Edit. ok, funktioniert, ist aber viel zu langsam. Wie will ich denn in einem großen Block auf ein einzelnes Zeichen prüfen? Ich habe jetzt nSize=1, und vergleiche es mit dem ersten Zeichen und wenn das richtig ist prüfe ich die restlichen mit Beachtung, dass dazwischen das Zeichen immer #0 ist (Unicode).
Da muss ich ja trotzdem alle Adressen durchlaufen lassen.