Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

2-Byte-Characters lesen/ausgeben (Big Endian)

  Alt 11. Mai 2009, 10:44
Hallo zusammen,

in der Datei, die ich mit einem TFileStream auslesen will, stehen Multibyte-/Unicode-Strings. D.h. alle Zeichen werden mit zwei Bytes kodiert. D.h. ich habe zum Beispiel folgenden Text in der Datei stehen (Hex-Code):
Code:
00 00 00 05 00 65 00 6E 00 2D 00 55 00 53
Die ersten vier Bytes geben mir die Länge des Strings an (i.e. 5 Zeichen). Dann folgen 10 Bytes (5 * 2 Bytes), die ich auslesen will.
Im Code sieht das jetzt bei mir so aus:
Delphi-Quellcode:
    fs.Read(bufSize, 4); bufSize := ChangeEndian32(bufSize);
    wbuf := StringOfChar(#00, bufSize*2);
    fs.Read(wbuf[1], bufSize*2);
    writeln('Locale: ', wbuf);
Dabei ist wbuf vom Typ WideString. Die Ausgabe ist dummerweise nur
Code:
Locale: ?????
Verwende ich UTF8String statt WideString bekomme ich immerhin eine Ausgabe. Die sieht jedoch so aus, als ob das zweite Byte nicht interpretiert wird (die Leerzeichen sind das Problem):
Code:
Locale: e n - U S
Kann das Problem im WideString-Fall damit zusammenhängen, dass die Datei im Big Endian-Format gespeichert ist oder bezieht sich das nur auf die Zahlwerte?
Wenn ja, wie kann ich geschickt einen String "umdrehen"? Meine ChangeEndian32-Routine (aus der Code-Lib übrigens) dreht nur DWORD-Werte um.

Gruß
Christopher
  Mit Zitat antworten Zitat