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).
@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 .
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 .
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.
string
Objekt 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).Unicode
es sich um eine statische Eigenschaft von handeltSystem.Text.Encoding
, die die Basisklasse von istASCIIEncoding
, sind beide Anweisungen tatsächlich gleich. Sie können auch über Unterklassen auf ein statisches Element zugreifen (dies wird jedoch nicht als idiomatisch angesehen).Antworten:
Sie können eine Codierung wie ASCII verwenden, um mithilfe der
System.Text.Encoding
Klasse ein Zeichen pro Byte zu erhalten .oder versuchen Sie dies
quelle
Length * sizeof(Char)
, die das gleiche Ergebnis liefern sollten, da jedesChar
UTF16 / 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 .Von MSDN :
Sie können dies also verwenden:
quelle
Oder
quelle