【问题标题】:Displaying Raw Data From Image File Using TextBox or RichTextBox?使用 TextBox 或 RichTextBox 显示图像文件中的原始数据?
【发布时间】:2013-06-27 20:19:32
【问题描述】:

我的程序读取 DDS 图像文件并将其存储为字节数组。我希望能够以 TextBox 形式向用户显示原始数据,因此首先我使用以下代码将字节数组转换为字符串:

string data = System.Text.Encoding.ASCII.GetString(bytes);

然后我设置 TextBox 文本:

textBox.Text = data;

我遇到的问题是文本框没有显示所有数据。这是它的外观截图:

如您所见,仅显示前几个字符。我假设这是因为字符串包含一个空终止符,TextBox 将其解释为字符串的结尾。这是我直接从调试器监视窗口复制的字符串中前 50 个左右字符的复制粘贴:

DDS |\0\0\0\a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\

如您所见,第一个空字符紧跟在“DDS |”之后这就解释了为什么这就是文本框中显示的全部内容。

我想要显示的内容类似于您使用 Notepadd++ 等文本编辑器编辑原始 DDS 文件时看到的内容。

在 Notepad++ 中打开 DDS 文件会产生以下结果:

我的问题是,如何让我的 TextBox(或 RichTextBox)以与 Notepad++ 显示数据相同的方式显示数据?

【问题讨论】:

  • 您是否尝试过使用 String.Replace 函数将空字符换成其他字符?
  • 不,我没有,但这是个好主意。我假设 Notepad++ 正在做类似的事情。甚至更花哨,为无法显示的事物绘制特殊符号(例如 null 的符号)。
  • 根据接受的答案here,您应该能够执行以下操作:Replace("\0", @"\0")
  • 我以前从未见过这样使用@符号。将@ 放在前面所示的字符串前面是什么意思?
  • 在字符串前面使用 @ 会导致转义序列被忽略。它将按原样显示。

标签: c# textbox richtextbox binary-data


【解决方案1】:

最简单的解决方案是使用这个:

textbox.Text = data.Replace("\0", @"\0");

这将强制文本框实际显示一个反斜杠,后跟一个零,即空值所在的位置。或者,您可以将空值替换为其他字符或字符串。

【讨论】:

  • 这正是我按照你的建议所做的。
  • 我应该补充一点,如果您允许编辑和保存,则必须将“\0”恢复为空值,如下所示:textbox.Text.Replace(@"\0", "\0")
  • 我是这么认为的。我想我会添加这个花絮,以防有人试图将它用于可编辑文件。
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多