【发布时间】:2014-03-03 12:56:37
【问题描述】:
我需要在条形码扫描中扩展控制字符(不可打印)。
这就是我所拥有的。目前,我对如何从输入字符串的子字符串中获取整数索引感到困惑。
// A method for expanding ASCII Control Character into Human Readable format
string ExpandCtrlString(string inStr)
{
// String Builder Capacity may need to be lengthened...
StringBuilder outStr = new StringBuilder(128);
// 0 Based Array representing the expansion of ASCII Control Characters
string[] CtrlChars = new string[]
{
"<nul>",
"<soh>",
"<stx>",
"<etx>",
"<eot>",
"<enq>",
"<ack>",
"<bel>",
"<bs>",
"<tab>",
"<lf>",
"<vt>",
"<ff>",
"<cr>",
"<so>",
"<si>",
"<dle>",
"<dc1>",
"<dc2>",
"<dc3>",
"<dc4>",
"<nak>",
"<syn>",
"<etb>",
"<can>",
"<em>",
"<sub>",
"<esc>",
"<fs>",
"<gs>",
"<rs>",
"<us>"
};
for (int n = 0; n < inStr.Length; n++)
{
if (Char.IsControl(inStr, n))
{
//char q = inStr.Substring(n, 1);
int x = (int)inStr[n] ();
outStr.Append(CtrlChars[x]);
}
else
{
outStr.Append(inStr.Substring(n, 1));
}
}
return outStr.ToString();
}
编辑: 想着想着就想到了……
我对子字符串进行了双重转换,它起作用了......
那是我选了演员... :)
for (int n = 0; n < inStr.Length; n++)
{
if (Char.IsControl(inStr, n))
{
int x = (int)(char)inStr[n];
outStr.Append(CtrlChars[x]);
}
else
{
outStr.Append(inStr.Substring(n, 1));
}
}
return outStr.ToString();
而且,它适用于 Windows Mobile 5 的 CF NET 2.0
我曾考虑过使用 foreach,但是,这给 VB6 的老家伙带来了其他问题。 :)
【问题讨论】:
-
乍一看,代码看起来不错。什么不工作?
inStr[n] ()是错字吗?大括号不应该在那里。 -
@SamLeach .. 虽然我同意您对文本组件的编辑,但我认为编辑问题本身的代码并不符合问题的最佳利益。恕我直言,这减损了我们对 OP 来自何处的理解,使其他评论员先前所做的陈述无效,而且代码仍然存在缺陷。如果你想指出 OP 哪里错了,那么答案就是它的赌注。
标签: c# string substring stringbuilder