¿Cómo saber el tamaño de la cadena en bytes?


103

Me pregunto si puedo saber cuánto tiempo en bytes para un stringen C #, ¿alguien lo sabe?



11
¿Está preguntando cuánta memoria stringocupa un objeto 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 respondió a la primera mientras que diya respondió a la última (al menos para dos codificaciones comunes).
Allon Guralnek


@AllonGuralnek: Buen punto. ¿Sabes por qué diya a continuación no sugirió usar System.Text.Encoding.Unicode.GetByteCount en su lugar? ¿Por qué ASCIIEncoding part?
giorgim

@Giorgi: Dado que Unicodees una propiedad estática de System.Text.Encoding, que es la clase base deASCIIEncoding , ambas declaraciones son en realidad iguales. También puede acceder a un miembro estático desde subclases (pero no se considera idiomático).
Allon Guralnek

Respuestas:


131

Puede usar codificación como ASCII para obtener un carácter por byte usando la System.Text.Encodingclase.

o prueba esto

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

13
Pregunta estúpida, pero ¿cómo sabremos si usar la clase Unicode o ASCII si los datos de la cadena provienen de un archivo de terceros?
Matthew Lock

7
@MatthewLock Debe usar UTF16 (o majidgeek's Length * sizeof(Char), que debería dar el mismo resultado ya que cada uno Chares UTF16 / 2-bytes) si desea el mismo número de bytes que la representación interna de una cadena. Si realmente desea la cantidad exacta de memoria que ocupa todo el objeto, en lugar de solo el número de bytes en su matriz de caracteres internos, entonces podría considerar un método más general .
Bob

91

Desde MSDN :

Un Stringobjeto es una colección secuencial de System.Charobjetos que representan una cadena.

Entonces puedes usar esto:

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

Hasta donde puedo entender los conceptos básicos de la estructura de datos, es la opción más 'ansiosa' para comparar
LoneXcoder

2
No olvide tener en cuenta el tamaño del larguero. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda

¿Qué pasa si la longitud de mi cadena es mayor que Int?
Jurijs Kastanovs

Esta debería ser la respuesta correcta. Además, .Length es la cantidad de bytes que recibirá el servidor si envía esa misma cadena. Esto es lo que necesitaba.
DaWiseguy

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

O

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.