【问题标题】:MessageBox cuts off text on \0 characterMessageBox 截断 \0 字符上的文本
【发布时间】:2016-10-18 00:09:07
【问题描述】:

我有这个字符串(从串口导出)

string dataincoming = 
  " 10\0/\0 17\0/\0 2016\0,\0 16\0:\0 59\0:\0 50\0,\0  51.1,\0   0.2,\0 1,\0 0,\0\r";
MessageBox.Show(dataincoming);

但消息框显示'10'

我做错了什么?

【问题讨论】:

  • 试试这个来修复字符串:dataincoming = string.Join("", dataincoming.Split(new char[] {'\0', '\r', ' '}, StringSplitOptions.RemoveEmptyEntries) );

标签: c#


【解决方案1】:

字符\0是一个空字符,它将停止在那里显示文本

如果要显示,必须加@"text"

你可以添加这个辅助方法

public static class Helper
{
    public static string RemoveNullCharacter(this string str)
    {
        return str.Replace("\0", "");
    }
}

并像使用它一样

MessageBox.Show(dataincoming.RemoveNullCharacter());

【讨论】:

  • 好的 - 那么我该如何解决这个问题呢?它应该像这样“10/ 17/ 2016, 17: 6: 50, 50.9, 0.2, 1, 0”
  • 您可能会争辩说,因为它会在控制台中显示更多数据,这实际上是 MessageBox API 中的一个错误。 \0 是 .NET 字符串中的有效字符。
  • 消息框 api 调用了 win32 api,所以没有修复它。
  • @mikez 看看 Daniel 的原因
  • @Fredou 大概调用控制台也会在某些时候调用 Win32 API,所以我不明白为什么这会有所作为。
【解决方案2】:

将空终止符替换为某个符号(空格):

dataincoming = dataincoming.Replace('\0', ' ');

【讨论】:

  • 这将删除一个空字符以添加一个空格字符,不确定是否是想要的
猜你喜欢
  • 1970-01-01
  • 2014-01-24
  • 2015-04-21
  • 2012-12-19
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
相关资源
最近更新 更多