将字符串内的十六进制表示转换为二进制等效

时间:2010-10-26 09:35:10

标签: c# .net string

在字符串中,替换每次出现的< 0xYZ>具有十六进制值YZ的字符。 <和>字符将仅用于此目的,字符串保证格式良好。

示例('0'= 0x30):A<0x30>B =&gt; A0B

这是一项简单的任务,但有很多解决方案,我想知道最好的方法。

3 个答案:

答案 0 :(得分:2)

我认为正则表达式替换是最简单的方法:

s = Regex.Replace(
  s,
  @"<0[Xx]([\dA-Fa-f]{2})>",
  m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()
);

通过匹配精确模式,它对字符串的限制较少,例如仍然可以使用<>个字符。此外,如果标签碰巧发生故障,它将只是保持不变,而不是引起异常。

这将替换<0X4A><0x4a>等标记,但保持<0x04a>不变。

答案 1 :(得分:1)

您可以使用正则表达式轻松完成:

s = Regex.Replace(s, "<0x([0-9a-f]+)>",
      m => Char.ConvertFromUtf32(
                      Int32.Parse(m.Groups[1].Value, NumberStyles.HexNumber))
      ); 

可能缺少一些错误检查。这使用overload of Regex.Replace that takes a MatchEvaluator

答案 2 :(得分:0)

匹配数字并转换为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