【问题标题】:How can I convert a textual representation of a hexadecimal value to a hexadecimal value?如何将十六进制值的文本表示形式转换为十六进制值?
【发布时间】:2018-02-01 18:42:54
【问题描述】:

我正在尝试将表示十六进制值的字符串(例如"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 值,我被卡住了。

感谢您的帮助。

【问题讨论】:

标签: c# hex byte data-conversion


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2018-01-22
    • 2018-07-26
    相关资源
    最近更新 更多