Come conoscere la dimensione della stringa in byte?


103

Mi chiedo se posso sapere quanto tempo in byte per un stringin C #, qualcuno lo sa?


Dai un'occhiata a questa risposta .
dasblinkenlight

11
Stai chiedendo quanta memoria stringoccupa un oggetto, o quanti byte la rappresentazione di una stringa occuperà quando scritta su un file o inviata su una rete (cioè codificata), perché quelle sono due domande completamente diverse. majidgeek ha quasi risposto alla prima mentre diya ha risposto alla seconda (almeno per due codifiche comuni).
Allon Guralnek

possibile duplicato di quanti byte ci vorranno?
nawfal

@ AllonGuralnek: buon punto. sai perché diya di seguito non ha suggerito di utilizzare System.Text.Encoding.Unicode.GetByteCount invece? Perché ASCIIEncoding parte?
giorgim

@Giorgi: Poiché Unicodeè una proprietà statica di System.Text.Encoding, che è la classe base di ASCIIEncoding, entrambe le istruzioni sono effettivamente le stesse. Puoi accedere a un membro statico anche dalle sottoclassi (ma non è considerato idiomatico).
Allon Guralnek

Risposte:


131

Puoi utilizzare la codifica come ASCII per ottenere un carattere per byte utilizzando la System.Text.Encodingclasse.

o prova questo

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);

13
Domanda stupida, ma come faremo a sapere se utilizzare la classe Unicode o ASCII se i dati nella stringa provengono da un file di terze parti?
Matthew Lock

7
@MatthewLock Dovresti usare UTF16 (o majidgeek Length * sizeof(Char), che dovrebbe dare lo stesso risultato poiché ognuno Charè UTF16 / 2-byte) se vuoi lo stesso numero di byte della rappresentazione interna di una stringa. Se si desidera effettivamente la quantità esatta di memoria occupata dall'intero oggetto, anziché solo il numero di byte nel suo array di caratteri interno, è possibile considerare un metodo più generale .
Bob

91

Da MSDN :

Un Stringoggetto è una raccolta sequenziale di System.Charoggetti che rappresentano una stringa.

Quindi puoi usare questo:

var howManyBytes = yourString.Length * sizeof(Char);

per quanto posso capire basi della struttura di dati è il più 'Pined' scelta da confrontare
LoneXcoder

2
Non dimenticare di prendere in considerazione la dimensione del membro di lunghezza. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda

Cosa succede se la mia lunghezza della stringa è maggiore di Int?
Jurijs Kastanovs

Questa dovrebbe essere la risposta corretta. Inoltre .Lunghezza è la quantità di byte che il server riceverà se invii la stessa stringa. Questo è ciò di cui avevo bisogno.
DaWiseguy,

24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

O

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.