2012-01-03 4 views
56

Mi chiedo se posso sapere per quanto tempo in byte per un string in C#, qualcuno lo sa?Come conoscere la dimensione della stringa in byte?

+0

Partenza [questa risposta] (http://stackoverflow.com/questions/472906/net-string-to-byte-array-c-sharp). – dasblinkenlight

+9

Stai chiedendo quanta memoria occupa un oggetto 'stringa', o quanti byte la rappresentazione di una stringa occuperà quando viene scritta su un file o inviata su una rete (vale a dire codificata), perché si tratta di due domande completamente diverse. majidgeek ha quasi risposto al primo mentre diya ha risposto a quest'ultimo (almeno per due codifiche comuni). –

+0

possibile duplicato di [quanti byte impiegheranno?] (Http://stackoverflow.com/questions/3967411/how-much-bytes-will-take) – nawfal

risposta

88

È possibile utilizzare la codifica ASCII come per ottenere un carattere per byte utilizzando la classe System.Text.Encoding.

o provare questo

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

Domanda stupida, ma come potremo sapere se utilizzare la classe Unicode o ASCII se i dati nella stringa provengono da un file di terze parti? –

+5

@MatthewLock Dovresti usare UTF16 (o 'Length * sizeof (Char) 'di majidgeek, che dovrebbe dare lo stesso risultato dato che ogni' Char' è UTF16/2-bytes) se vuoi lo stesso numero di byte della rappresentazione interna di una stringa. Se si desidera effettivamente la quantità esatta di memoria utilizzata dall'intero oggetto, piuttosto che il numero di byte nella sua matrice di caratteri interna, si potrebbe prendere in considerazione un [metodo più generale] (http://stackoverflow.com/questions/1128315/ trovare-size-di-oggetto-esempio-in-byte-in-c-sharp). – Bob

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

O

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

Da MSDN:

Un oggetto String è un insieme sequenziale di System.Char oggetti che rappresentano una stringa.

Quindi è possibile utilizzare questo:

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

per quanto io possa capire le basi della struttura dei dati è la scelta più "pined" da confrontare con – LoneXcoder

+0

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

+0

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