如何将十六进制值的文本表示形式转换为十六进制值?

时间:2018-02-01 18:42:55

标签: c# hex byte data-conversion

我尝试将表示十六进制值的字符串(例如"A0F3")转换为十六进制或byte值。我试着做这样的事情:

string text = "A0F3";
char[] chars = text.ToCharArray();
StringBuilder stringBuilder =  new StringBuilder();

foreach(char c in chars)
{
  stringBuilder.Append(((Int16)c).ToString("x"));
}

String textAsHex = stringBuilder.ToString();
Console.WriteLine(textAsHex);

但显然我没有将最终值转换为byte值,我被卡住了。

我感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

Convert.ToInt32有一个以基数为参数的重载。

Convert.ToInt32("A0F3",16)应该会产生预期的结果。

但是,如果您想将其自己编码为练习,则通用算法为:每个字符对应一个4位值。将每个字符转换为它的值,并通过向左移动位来创建一个整数。这可能是一般算法,请不要在不添加边界检查,0x前缀支持等的情况下使用(并且你真的应该使用生成代码的框架内置函数) - 但是这里有:

public static int FromHexString(string hex)
{
       int value = 0;
       foreach (char c in hex.ToUpperInvariant().Trim())
       {
           var n = c >= '0' && c <= '9' ? c - '0' : c - 'A' + 10;
           value = (value << 4) | n;
       }

       return value;
}