我为用户输入数据编写了一个转换器,它将数字值字符串和' '
中包含的ascii字符转换为十六进制表示。输入数字可以正常使用:
string TestText = "lorem, 'C', 127, 0x06, '#' ipsum";
TestText = Regex.Replace(
TestText,
" +\\d{1,3}",
(MatchEvaluator)(match => Convert.ToByte(match.Value).ToString("X2")));
Out.Text = TestText;
但是如何检测' '
中包含的ascii字符并将其转换为十六进制字符串,如:'C'
将43
而'+'
变为2B
答案 0 :(得分:0)
基本上,您希望匹配正则表达式'[^']'
。这会查找非'
但包含在'
中的所有字符。
然后,在匹配评估器中,您将获得中间的字符,并将其转换为十六进制字符串。要做到这一点,首先将char
投射到int
,然后您可以使用ToString("x2")
:
TestText = Regex.Replace(TestText, "'[^']'",
(MatchEvaluator)(match => ((int)match.Value[1]).ToString("x2")));
答案 1 :(得分:0)
首先,您需要一个RegEx来捕获'
中的字符:"'(.)'"
然后您需要将该字符转换为十六进制等效字符,如下所示:Encoding.ASCII.GetBytes(match.Groups[1].Value).First().ToString("X2")
所以你的最终代码看起来像这样:
string TestText = "lorem, 'C', 127, 0x06, '#' ipsum '+'";
TestText = Regex.Replace(TestText, @" +\d{1,3}", match => Convert.ToByte(match.Value).ToString("X2"));
TestText = Regex.Replace(TestText, "'(.)'", match => Encoding.ASCII.GetBytes(match.Groups[1].Value).First().ToString("X2"));
Out.Text = TestText;
请注意,正如评论中所指出的,您的RegEx目前与0
开头的0x06
匹配,这可能不是您想要的。