我有一个字符串,其中包含一些不可打印的ascii字符,如:
"ABCD\x09\x05\r\n"
Run Code Online (Sandbox Code Playgroud)
我想用十六进制代码编号的ascii字符串表示替换这些字符,所以我得到这样的东西:
"ABCD[09][05][0D][0A]"
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法呢?可以使用正则表达式吗?
drf*_*drf 24
该模式\p{Cc}匹配任何控制字符,所以
Regex.Replace(input,
@"\p{Cc}",
a=>string.Format("[{0:X2}]", (byte)a.Value[0])
);
Run Code Online (Sandbox Code Playgroud)
也会取代控制字符.
string s = "ABCD\x09\x05\r\n";
var replace =
s.Select(c => Char.IsControl(c) ? ((int)c).ToString("X2") : c.ToString())
.Aggregate(new StringBuilder(), (sb, t) => sb.Append(t))
.ToString();
Run Code Online (Sandbox Code Playgroud)
对不起,没有编译器方便,但我认为这编译并完成工作.
此外,这种类型的字符串遍历两次(一次将每个字符投影到十六进制替换或字符串,然后再次聚合),并且您可以通过将投影集中到调用中来避免这种情况Enumerable.Aggregate,但这更加清晰,它可能并不重要,除非这对性能至关重要.
| 归档时间: |
|
| 查看次数: |
9162 次 |
| 最近记录: |