2012-01-03 51 views
56

Me pregunto si puedo saber cuánto tiempo en bytes para un string en C#, ¿alguien sabe?¿Cómo saber el tamaño de la cadena en bytes?

+0

Salida [esta respuesta] (http://stackoverflow.com/questions/472906/net-string-to-byte-array-c-sharp) – dasblinkenlight

+9

¿Está preguntando cuánta memoria ocupa un objeto 'string', o cuántos bytes ocupará la representación de una cadena cuando se escribe en un archivo o se envía a través de una red (es decir, codificada), porque esas son dos preguntas completamente diferentes. majidgeek casi responde al anterior mientras que diya responde al último (al menos por dos codificaciones comunes). –

+0

posible duplicado de [¿cuántos bytes tomará?] (Http://stackoverflow.com/questions/3967411/how-much-bytes-will- take) – nawfal

Respuesta

88

Puede utilizar la codificación ASCII como para obtener un carácter por byte utilizando la clase System.Text.Encoding.

o probar este

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

Pregunta estúpida, pero ¿cómo sabremos si usar la clase Unicode o ASCII si los datos en la cadena provienen de un archivo de un tercero? –

+5

@MatthewLock Deberías usar UTF16 (o el tamaño de 'Longitud * sizeof (Char) 'de majidgeek, que debería dar el mismo resultado ya que cada' Char' es UTF16/2-bytes) si quieres la misma cantidad de bytes que la representación interna de una cuerda. Si realmente desea la cantidad exacta de memoria que ocupa todo el objeto, en lugar de solo la cantidad de bytes en su matriz de caracteres interna, entonces podría considerar un [método más general] (http://stackoverflow.com/questions/1128315/ find-size-of-object-instance-in-bytes-in-c-sharp). – Bob

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

O

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

De MSDN:

Un objeto String es una colección secuencial de System.Char objetos que representan una cadena.

Así que usted puede utilizar esto:

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

por lo que puedo entender los fundamentos de la estructura de datos es la elección más 'pinada' para comparar con – LoneXcoder

+0

No olvide tener en cuenta el tamaño del miembro de longitud. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int); –

+0

¿Qué sucede si la longitud de mi cadena es mayor que la Int? –

Cuestiones relacionadas