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

StackOverflow https://stackoverflow.com/questions/1402622

Вопрос

У меня есть массив байтов, подобный этому (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, но это ничего не меняет.

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

Это было полезно?

Решение

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

Другие советы

На самом деле это не пространства:

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

... должно сработать.

-Ойсин

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

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

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

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

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

Вы можете указать index и count в перегрузке GetString (byte [] байтов, 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

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

$yourString.TrimEnd(0x00)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top