在字符串中找到十六进制数,然后将其转换为十进制

本文关键字:转换 十进制 然后 字符串 十六进制数 | 更新日期: 2023-09-27 18:31:42

假设我收到多个不同的字符串,例如

"private var color:uint = 0xff000010"
"private var something:uint = 0xf2010"
"private var anotherNumber:int = 5435344"

我想检查字符串是否包含十六进制数,以及是否有一个可以用其十进制值替换它。对于转换,我认为这就足够了:

string hexToDecimal = int.Parse(color, System.Globalization.NumberStyles.HexNumber).ToString();

但是我是正则表达式的新手,我很难做整个算法来查找然后以简单的方式替换十六进制。

我将非常感谢任何帮助。提前谢谢。

更新:这是它应该能够转换的另一个示例:

"private var color:uint = 0xff000010 0x00000ff 'n0xffffff"

在字符串中找到十六进制数,然后将其转换为十进制

Regex.Replace重载与匹配评估器一起使用(请参阅演示):

var s = "private var color:uint = 0xff000010'nprivate var something:uint = 0xf2010'nprivate var anotherNumber:int = 5435344";
var res = Regex.Replace(s, @"(?i)'b0x([a-f0-9]+)'b", m => Hex2Dec(m.Groups[1].Value));
Console.WriteLine(res); 

赋值器方法是

public static string Hex2Dec(string m)
{
    return int.Parse(m, System.Globalization.NumberStyles.HexNumber).ToString();
}

输出:

private var color:uint = -16777200
private var something:uint = 991248
private var anotherNumber:int = 5435344

正则表达式匹配:

  • (?i) - 使模式不区分大小写
  • 'b - 字边界
  • 0x - 0x的文字序列
  • ([a-f0-9]+) - 组 1 匹配 a-f0-9字符范围内的一个或多个字符
  • 'b - 尾随词边界

这应该有效:

        string input = "private var color:uint = 0xff000010";
        Match match = Regex.Match(input, @".*(0x[0-9a-fA-F]+).*", RegexOptions.IgnoreCase);
        if (match.Success)
        {
            string key = match.Groups[1].Value;
            uint hexToDecimal = (uint)new System.ComponentModel.UInt32Converter().ConvertFromString(key);
            input = input.Replace(key, hexToDecimal.ToString());          
        }

输入变量中的十六进制数更改(如果匹配)