C# 将字符串中的十六进制表示形式转换为等效的二进制表示形式
在字符串中,用十六进制值YZ字符替换的每个匹配项。<和>字符仅用于此目的,字符串保证格式良好 示例('0'=0x30):C# 将字符串中的十六进制表示形式转换为等效的二进制表示形式,c#,.net,string,C#,.net,String,在字符串中,用十六进制值YZ字符替换的每个匹配项。字符仅用于此目的,字符串保证格式良好 示例('0'=0x30):AB=>A0B 这是一项简单的任务,但有很多解决方案,我想知道最好的方法。使用正则表达式可以轻松完成: s = Regex.Replace(s, "<0x([0-9a-f]+)>", m => Char.ConvertFromUtf32( Int32.Parse(m.Groups[1].Value, Numbe
AB
=>A0B
这是一项简单的任务,但有很多解决方案,我想知道最好的方法。使用正则表达式可以轻松完成:
s = Regex.Replace(s, "<0x([0-9a-f]+)>",
m => Char.ConvertFromUtf32(
Int32.Parse(m.Groups[1].Value, NumberStyles.HexNumber))
);
s=Regex.Replace(s,“,
m=>Char.ConvertFromUtf32(
解析(m.Groups[1].值,NumberStyles.HexNumber))
);
它可能缺少一些错误检查。这使用了。我认为正则表达式替换是最简单的方法:
s = Regex.Replace(
s,
@"<0[Xx]([\dA-Fa-f]{2})>",
m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()
);
s=Regex.Replace(
s
@"",
m=>((char)Convert.ToInt32(m.Groups[1].Value,16)).ToString()
);
通过匹配精确的模式,它对字符串的限制更少,例如,
字符仍然可以使用。此外,如果一个标记碰巧出现错误,它将保持不变,而不是导致异常
这将替换像
和
这样的标记,但保持例如
不变。匹配数字并转换为int,然后转换为char
var str = "A<0x30>B";
var result = Regex.Replace(str, "<0x((\\d|[A-Z])+)>",
delegate (Match m)
{
return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString();
}, RegexOptions.IgnoreCase);
A0B