【发布时间】:2013-10-22 16:21:14
【问题描述】:
我正在为自己的需要编写一个小型十六进制查看器。陷入标准 Label 控件不会在字符串中显示不可打印字符的情况:
public string ToASCIIstring(int numColumns)
{
string ret = String.Empty;
int stringBegin = 0;
for (int i = 0; i < Data.Length; i++)
{
int colNum = i % numColumns;
if ((colNum + 1 == numColumns) || (i == Data.Length -1 ))
{
ret += Encoding.ASCII.GetString(Data, stringBegin, colNum);
stringBegin = i + 1;
ret += "\n";
}
}
return ret;
}
此方法返回正确的 ASCII 字符串,但在将其分配给 Label.Text 属性后,它变成了一个空字符串,没有任何显示。
任何帮助都会很可爱
附:我知道代码很糟糕,但它永远不会看到生产,它只是我自己的分析工具
【问题讨论】:
-
好吧,不可打印的字符是……不可打印的。像 ASCII 7 这样的东西真的没有字形来表示它们。尝试显示一个“。”而是。
-
请尝试 Encoding.Unicode.GetString... 。还可以尝试将一些硬编码文本设置为 tghe 标签,也许它只是在后台
-
如果要显示十六进制,则必须将字节实际转换为十六进制。使用 BitConverter.ToString()。您会在 this answer 中找到同时执行这两种操作的示例代码。
-
看起来你知道那个 ASCII 字符串 是什么,你能试着在这里显示那个 ASCII 字符串 或者至少显示它的 ASCII 码 让我们试试?
-
@KrisVandermotten 好吧,我可以手动检查不可打印的字符并用一些符号替换它们。这是我对此的第一个想法。事情可能不是事情应该如何工作 - 我可以在调试器中看到字符串并将其打印到控制台(它会发出哔哔声,但仍然会打印它) - 但我不能将它分配给标签。这很奇怪——它基本上是一个 CLR 字符串,所以无论里面有什么,Label 都应该能够打印它