Строка из байтового массива не обрезается в С#?
Вопрос
У меня есть массив байтов, подобный этому (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)