¿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).
@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.
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 .
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.
string
ocupa 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).Unicode
es una propiedad estática deSystem.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).Respuestas:
Puede usar codificación como ASCII para obtener un carácter por byte usando la
System.Text.Encoding
clase.o prueba esto
fuente
Length * sizeof(Char)
, que debería dar el mismo resultado ya que cada unoChar
es 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 .Desde MSDN :
Entonces puedes usar esto:
fuente
O
fuente