Pergunta

Eu tenho uma matriz de bytes semelhante a este (16 bytes):

71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00

Eu uso isso para convertê -lo em uma corda e aparar os espaços finais:

ASCIIEncoding.ASCII.GetString(data).Trim();

Eu fico bem na corda, no entanto, ela ainda tem todos os espaços finais. Então eu entendo algo como "qwerty.........." (onde os pontos são espaços devido ao StackOverflow).

O que estou fazendo errado?

Também tentei usar .TriMend () e usar uma codificação UTF8, mas isso não muda nada.

Desde já, obrigado :)

Foi útil?

Solução

Você tem que fazer TrimEnd(new char[] { (char)0 }); Para consertar isso. Não são espaços - na verdade são personagens nulos que são convertidos estranhamente. Eu também tive esse problema.

Outras dicas

Eles não são realmente espaços:

System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')

... deve fazer o truque.

-Oisin

TRIM por padrão Remove apenas o espaço em branco, onde o espaço em branco é definido por char.IsWhitespace.

'\0' é um personagem de controle, não espaço em branco.

Você pode especificar quais caracteres aparar usando o Trim(char[]) sobrecarga:

string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });

Por que tentar criar a string primeiro e apará -la em segundo? Isso pode adicionar muita sobrecarga (se o byte [] for grande).

Você pode especificar index e count no 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

Em PowerShell, você pode fazer isso:

$yourString.TrimEnd(0x00)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top