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 :)

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top