【问题标题】:Null character deleting rest of output in TextBox and RichTextBox [duplicate]空字符删除 TextBox 和 RichTextBox 中的其余输出 [重复]
【发布时间】:2017-07-09 20:01:06
【问题描述】:

我遇到了这个烦人的功能/错误。假设我有一个带有尾随空格的字符串,如下所示:

string value = "someValue    ";

空格的数量可能会有所不同。所以我尝试在TextBox 中显示它,并包含在开始和结束标签中,看看它是如何变化的,并且效果很好。

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

但是向我发送此值的设备喜欢在末尾添加一个 \0 空字符,如下所示:

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

当我尝试用相同的方法显示它时:

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

它会导致#END 标记消失。 同样的现象也发生在RichTextBox

问题: 为什么空字符会杀死/吃掉字符串的其余部分? 是否像在 C 或 C++ 中那样被解释为字符串中 char 数组的结尾?

【问题讨论】:

  • 这就是 Windows 控件通常的行为方式。是的,就像在 C 或 C++ 中一样,您的设备显然将 '0' 作为您也应该尊重的普遍接受的终结符。
  • value = value.TrimEnd('\0') ?
  • @GSerg 不,不幸的是,我的设备将其视为错误。所以我想我只需要调整并小心删除它。

标签: c# winforms textbox richtextbox null-character


【解决方案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
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2015-09-26
    • 2013-10-13
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多