[C#]BinaryReader.ReadString() - UTF8? [help]

08/23/2013 22:16 Logtetsch#1
Abend,

wollte mal fragen, ob es etwas wie die Methode .ReadString() nur halt als ANSI oder UTF8 gibt?

Danke im Vorraus.

mfg Logtetsch
08/23/2013 22:31 kissein#2
Bei der Initialisierung kann man die Zeichencodierung mit angeben.
08/24/2013 06:23 Easy-Emu#3
Wobei du, um wirklich sicher zu sein eine eigene methode schreibe solltest, die dann so aehnlich aussieht:

var stringArray = br.ReadBytes(count);
return Encoding.UTF8.GetString(stringArray);
08/24/2013 13:26 Logtetsch#4
Quote:
Originally Posted by Easy-Emu View Post
Wobei du, um wirklich sicher zu sein eine eigene methode schreibe solltest, die dann so aehnlich aussieht:

var stringArray = br.ReadBytes(count);
return Encoding.UTF8.GetString(stringArray);
Das Problem ist, ich weiß nicht wie groß der nächste String ist.
08/26/2013 09:42 Easy-Emu#5
dann wird er null terminated sein (gehe ich mal von aus)
dann liest du ebn byte fuer byte aus und ueberpruefst, in einer while schleife, wann 00 kommt und der string ende ist
08/26/2013 14:36 Tasiro#6
Der String wird nicht nullterminiert gespeichert, er beginnt mit einer Angabe der Länge. Wenn das erste Byte einen Wert von weniger als 128 aufweist, dann entspricht dieser Wert der Länge des Strings. Ansonsten musst du das höchstwertige Bit umschalten und das nächste Byte ähnlich interpretieren. So erhälst du eine Reihe von Bits, die du dann als Länge interpretieren kannst. Siehe dazu auch die entsprechende [Only registered and activated users can see links. Click Here To Register...].
08/27/2013 16:48 Logtetsch#7
Quote:
Originally Posted by Easy-Emu View Post
dann wird er null terminated sein (gehe ich mal von aus)
dann liest du ebn byte fuer byte aus und ueberpruefst, in einer while schleife, wann 00 kommt und der string ende ist
Quote:
Originally Posted by Tasiro View Post
Der String wird nicht nullterminiert gespeichert, er beginnt mit einer Angabe der Länge. Wenn das erste Byte einen Wert von weniger als 128 aufweist, dann entspricht dieser Wert der Länge des Strings. Ansonsten musst du das höchstwertige Bit umschalten und das nächste Byte ähnlich interpretieren. So erhälst du eine Reihe von Bits, die du dann als Länge interpretieren kannst. Siehe dazu auch die entsprechende [Only registered and activated users can see links. Click Here To Register...].
Weder- noch.
Ich war dabei eine einfache Struktur aus mehreren bytes, strings und anderen Datentypen auszulesen. Dabei habe ich einfach übersehen, dass die länge der Strings immer vor dem Stringanfang definiert war.

Code:
struct str
{
      ..........
      write dword/ word/ byte (stringlen)
      write string
      ..........
}
Habe mittlerweile das Problem gelöst.
Trotzdem bedanke ich mich für eure Hilfe.
08/27/2013 17:27 Tasiro#8
Und woher weißt du, wie viele Bytes zur Länge des Strings gehören? In der Form entspricht das jedenfalls nicht der ReadString-Methode... das solltest du dann nicht kombinieren.
08/27/2013 22:03 xxfabbelxx#9
closed on request