【发布时间】: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