2017-02-20 3 views
0

Я столкнулся с этим раздражающим признаком/ошибкой. Предположим, у меня есть строка с завершающими пробелами вроде:Нулевой символ, удаляющий остальную часть вывода в TextBox и RichTextBox

string value = "someValue "; 

Количество мест может варьироваться. Поэтому я пытаюсь показать его в TextBox, заключенном в начало и конец тегов, чтобы узнать, как он меняется, и он отлично работает.

textBox1.Text = $"BEGIN#{value}#END"; 

Но устройство, отправить мне это значение любит, чтобы добавить \0 нулевой символ в конце, как это:

string value = "someValue " + Convert.ToChar(0x00); 

и когда я пытаюсь отобразить его с тем же самым способом:

textBox1.Text = $"BEGIN#{value}#END; 

Это приводит к исчезновению тега #END. Такое же явление происходит в RichTextBox.

enter image description here

Вопрос: Почему нулевой символ убивает/съедает оставшуюся часть строки? Как на C или C++ интерпретируется как конец массива char в строке?

+0

Вот как обычно управляют элементы управления Windows. Да, это похоже на C или C++, и ваше устройство, по-видимому, ставит «0» в качестве общепринятого терминатора, который вы также должны уважать. – GSerg

+0

'value = value.TrimEnd ('\ 0')'? – spender

+0

@GSerg Нет моего устройства, к сожалению, это ошибка. Поэтому, я думаю, мне нужно только настроить и позаботиться о его удалении. –

ответ

1

На некоторых языках, таких как C и C++, нулевой символ указывает конец строки. В .NET Framework нулевой символ может быть встроен в строку. Когда строка содержит один или несколько нулевых символов, они включаются в длину общей строки. Например, в следующей строке подстроки «abc» и «def» разделяются нулевым символом. Свойство Length возвращает 7, что указывает на то, что оно включает в себя шесть буквенных символов, а также нулевой символ.

using System; 
using System.Text; 

public class StringClassTest 
{ 
    public static void Main() 
    { 
     string characters = "abc\u0000def"; 
     Console.WriteLine(characters.Length); // Displays 7 
    } 
} 
Смежные вопросы