Me gustaría poner una cadena en una matriz de bytes, pero la cadena puede ser demasiado grande para caber. En el caso de que sea demasiado grande, me gustaría poner la mayor cantidad de cadena posible en la matriz. ¿Hay una manera eficiente de averiguar cuántos caracteres encajarán?¿Cómo trunco una cadena al convertir a bytes en C#?
Respuesta
Con el fin de truncar una cadena a una matriz de bytes UTF-8 sin división en medio de un personaje que use este:
static string Truncate(string s, int maxLength) {
if (Encoding.UTF8.GetByteCount(s) <= maxLength)
return s;
var cs = s.ToCharArray();
int length = 0;
int i = 0;
while (i < cs.Length){
int charSize = 1;
if (i < (cs.Length - 1) && char.IsSurrogate(cs[i]))
charSize = 2;
int byteSize = Encoding.UTF8.GetByteCount(cs, i, charSize);
if ((byteSize + length) <= maxLength){
i = i + charSize;
length += byteSize;
}
else
break;
}
return s.Substring(0, i);
}
La cadena devuelta luego se pueden transferir de forma segura a una matriz de bytes de longitud maxLength.
¿Debería utilizar la clase de codificación para hacer la conversión correcta a la matriz de bytes? Todos los objetos de codificación tienen un método reemplazado GetMaxCharCount, que le dará "la cantidad máxima de caracteres producida decodificando el número de bytes especificado". Debería poder usar este valor para recortar su cadena y codificarla adecuadamente.
manera eficiente sería encontrar la cantidad (pesimista) bytes necesitará por carácter con
Encoding.GetMaxByteCount(1);
luego dividiendo el tamaño de la cadena por el resultado, convirtiendo después que mucho caracteres con
public virtual int Encoding.GetBytes (
string s,
int charIndex,
int charCount,
byte[] bytes,
int byteIndex
)
Si desea utilizar menos memoria, use
Encoding.GetByteCount(string);
pero eso es un método mucho más lento.
La clase de codificación en .NET tiene un método llamado GetByteCount
que puede tomar una cadena o char []. Si pasa en 1 carácter, le dirá cuántos bytes se necesitan para ese 1 carácter en la codificación que esté utilizando.
El método GetMaxByteCount
es más rápido, pero realiza un cálculo de caso más desfavorable que podría devolver un número mayor que el realmente necesario.
Cookey, su código no hace lo que aparentemente piensa que hace. La asignación previa del búfer de bytes en su caso es pura pérdida porque no se usará. Por el contrario, su asignación descarta la memoria asignada y restablece la referencia arr
para apuntar a otro almacenamiento intermedio porque Encoding.GetBytes
devuelve una nueva matriz.
- 1. conversión de bytes a una cadena C#
- 2. cómo convertir cadena a byte [] en C#
- 3. Cómo convertir una matriz de bytes hash C# a una cadena para pasarla a la API?
- 4. ¿Cómo trunco una lista en C#?
- 5. ¿Convertir una matriz de bytes a cadena en Silverlight?
- 6. C#/CSS: Convertir bytes a cadena CSS hexagonal
- 7. Cómo convertir una cadena codificada en hexadecimal a una cadena de bytes en Perl?
- 8. Cómo convertir a NSString bytes
- 9. Python: convertir cadena a matriz de bytes
- 10. ¿Cómo trunco una lista?
- 11. Problemas al convertir una matriz de bytes a una cadena y volver a la matriz de bytes
- 12. Convertir cadena de unicode a cadena de bytes
- 13. Error al convertir una matriz de bytes a una matriz int en C#
- 14. Cómo convertir eficientemente la matriz de bytes a la cadena
- 15. Cómo convertir cadena a entero en C#
- 16. ¿Convertir int a una matriz de bytes en C?
- 17. convertir una cadena de bytes en un int (python)
- 18. Convertir una matriz de bytes a una clase que contiene una matriz de bytes en C#
- 19. Cómo convertir cadenas a matrices de bytes?
- 20. Cómo convertir una cadena de pinyin a chino en C#
- 21. Cómo convertir cadena a LPWSTR en C++
- 22. ¿Cómo convertir una cadena a ascii en binario en C#?
- 23. ¿Cómo convertir una matriz de bytes en doble en C?
- 24. ¿Cómo trunco una cadena java para caber en un número dado de bytes, una vez que UTF-8 está codificado?
- 25. ¿Cómo convertir una matriz de bytes a una matriz int?
- 26. cómo convertir una cadena c en una cadena d?
- 27. Cómo convertir una cadena a RTF en C#?
- 28. Cómo convertir fórmula cadena a una fórmula matemática en C#
- 29. Cómo convertir una cadena rtf a texto en C#
- 30. Convertir cadena a Color en C#
Esto no funciona si su límite es la cantidad de bytes. (Solo si el límite es la cantidad de caracteres) – roim