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?


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


@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);

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);

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.