Подтвердить что ты не робот

Строка из массива байтов не обрезается в С#?

У меня есть массив байтов, подобный этому (16 байт):

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

Я использую это, чтобы преобразовать его в строку и обрезать конечные пространства:

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

Я получаю строку отлично, однако она все еще имеет все конечные пробелы. Поэтому я получаю что-то вроде "qwerty.........." (где точки - это пробелы из-за StackOverflow).

Что я делаю неправильно?

Я также пытался использовать .TrimEnd() и использовать кодировку UTF8, но ничего не меняет.

Заранее спасибо:)

4b9b3361

Ответ 1

Вы должны сделать TrimEnd(new char[] { (char)0 });, чтобы исправить это. Это не пробелы - это на самом деле пустые символы, которые преобразуются странно. У меня тоже была эта проблема.

Ответ 2

Это не просто пробелы:

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

... должен сделать трюк.

-Oisin

Ответ 3

Обрезать по умолчанию удаляет только пробелы, где пробел определяется char.IsWhitespace.

'\0' - это управляющий символ, а не пробел.

Вы можете указать, какие символы нужно обрезать с помощью Trim(char[]) перегрузки:

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

Ответ 4

Зачем пытаться сначала создать строку и обрезать ее второй? Это может добавить много накладных расходов (если байт [] большой).

Вы можете указать index и count в перегрузке GetString(byte[] bytes, int index, int count).

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

Ответ 5

В powershell вы можете сделать это:

$yourString.TrimEnd(0x00)