Woher weiß man die Größe der Zeichenfolge in Bytes?

103

Ich frage mich, ob ich wissen kann, wie lange in Bytes für ein stringin C #, weiß jemand?

user705414
quelle
Schauen Sie sich diese Antwort an .
Dasblinkenlight
11
Fragen Sie, wie viel Speicher ein stringObjekt belegt oder wie viele Bytes die Darstellung einer Zeichenfolge belegt, wenn sie in eine Datei geschrieben oder über ein Netzwerk gesendet (dh codiert) wird, da dies zwei völlig unterschiedliche Fragen sind. Majidgeek antwortete fast auf das erstere, während Diya auf das letztere antwortete (zumindest für zwei übliche Kodierungen).
Allon Guralnek
Mögliches Duplikat, wie viel Bytes benötigt werden?
Nawfal
@AllonGuralnek: Guter Punkt. Wissen Sie, warum diya unten nicht vorgeschlagen hat, stattdessen System.Text.Encoding.Unicode.GetByteCount zu verwenden? Warum ASCIIEncoding-Teil?
Giorgim
@Giorgi: Da Unicodees sich um eine statische Eigenschaft von handelt System.Text.Encoding, die die Basisklasse von ist ASCIIEncoding, sind beide Anweisungen tatsächlich gleich. Sie können auch über Unterklassen auf ein statisches Element zugreifen (dies wird jedoch nicht als idiomatisch angesehen).
Allon Guralnek

Antworten:

131

Sie können eine Codierung wie ASCII verwenden, um mithilfe der System.Text.EncodingKlasse ein Zeichen pro Byte zu erhalten .

oder versuchen Sie dies

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);
Diya
quelle
13
Dumme Frage, aber woher wissen wir, ob wir die Unicode- oder ASCII-Klasse verwenden sollen, wenn die Daten in der Zeichenfolge aus einer Datei eines Drittanbieters stammen?
Matthew Lock
7
@MatthewLock Sie sollten UTF16 (oder Majidgeeks Length * sizeof(Char), die das gleiche Ergebnis liefern sollten, da jedes CharUTF16 / 2-Byte ist) verwenden, wenn Sie die gleiche Anzahl von Bytes wie die interne Darstellung einer Zeichenfolge wünschen. Wenn Sie tatsächlich die genaue Speichermenge des gesamten Objekts und nicht nur die Anzahl der Bytes in seinem internen Zeichenarray benötigen, sollten Sie eine allgemeinere Methode in Betracht ziehen .
Bob
91

Von MSDN :

Ein StringObjekt ist eine sequentielle Sammlung von System.CharObjekten, die eine Zeichenfolge darstellen.

Sie können dies also verwenden:

var howManyBytes = yourString.Length * sizeof(Char);
Majid
quelle
Soweit ich die Grundlagen der Datenstruktur verstehen kann, ist es die beste Wahl, mit der man vergleichen kann
LoneXcoder
2
Vergessen Sie nicht, die Größe des Längenelements zu berücksichtigen. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda
Was ist, wenn meine Stringlänge größer als Int ist?
Jurijs Kastanovs
Dies sollte die richtige Antwort sein. Außerdem gibt .Length die Anzahl der Bytes an, die der Server erhält, wenn Sie dieselbe Zeichenfolge senden. Das brauchte ich.
DaWiseguy
24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

Oder

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);

quelle