¿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?

usuario705414
fuente
Mira esta respuesta .
dasblinkenlight
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
posible duplicado de la cantidad de bytes que tomará?
nawfal
@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);
diya
fuente
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);
Majid
fuente
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);

fuente