¿La cadena de la matriz de bytes no se recorta en C #?
Pregunta
Tengo una matriz de bytes similar a esta (16 bytes):
71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00
Lo uso para convertirlo en una cadena y recortar los espacios finales:
ASCIIEncoding.ASCII.GetString(data).Trim();
Me sale bien la cadena, sin embargo, todavía tiene todos los espacios finales.
Entonces obtengo algo como " qwerty .......... "
(donde los puntos son espacios debido a StackOverflow).
¿Qué estoy haciendo mal?
También intenté usar .TrimEnd () y usar una codificación UTF8, pero no cambia nada.
Gracias de antemano :)
Solución
Tienes que hacer TrimEnd (new char [] {(char) 0});
para solucionar este problema. No son espacios, en realidad son caracteres nulos que se convierten de forma extraña. Yo también tuve este problema.
Otros consejos
No son realmente espacios:
System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')
... debería hacer el truco.
-Oisin
Recortar de forma predeterminada elimina solo los espacios en blanco , donde el espacio en blanco se define por char.IsWhitespace
.
'\ 0'
es un carácter de control, no espacios en blanco.
Puede especificar qué caracteres recortar utilizando el Trim (char [ ])
sobrecarga:
string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
¿Por qué intentar crear primero la cadena y recortarla después? Esto podría agregar una gran cantidad de sobrecarga (si el byte [] es grande).
Puede especificar index
y count
en la GetString (byte [] bytes, int index, int count)
sobrecarga.
int count = data.Count(bt => bt != 0); // find the first null
string result = Encoding.ASCII.GetString(data, 0, count); // Get only the characters you want
En PowerShell, puedes hacer esto:
$yourString.TrimEnd(0x00)