将包含以“0x”开头的十六进制值的字符串转换为整数或长整数

时间:2010-11-25 18:21:14

标签: c# integer hex

如何将字符串值“0x310530”转换为C#中的整数值?

我已经尝试了 int.TryParse (甚至 int.TryParse System.Globalization.NumberStyles.Any )但它没有工作

更新 似乎Convert.ToInt64或Convert.ToInt32无需删除尾随的“0x”即可工作:

long hwnd = Convert.ToInt64("0x310530", 16);

Convert.ToInt64 Method (String, Int32)的文档说:

  

“如果fromBase为16,则可以为该值指定的数字加前缀   带“0x”或“0X”的参数。“

但是,我更喜欢像TryParse这样不会引发异常的方法。

5 个答案:

答案 0 :(得分:24)

int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");

答案 1 :(得分:13)

来自MSDN

  

NumberStyles.AllowHexSpecifier

     

表示数字字符串表示十六进制值。有效的十六进制值包括数字0-9和十六进制数字A-F和a-f。使用此样式解析的字符串不能以<0x“或”&amp; h“作为前缀

所以你必须首先删除0x前缀:

string s = "0x310530";
int result;

if (s != null && s.StartsWith("0x") && int.TryParse(s.Substring(2),
                                                    NumberStyles.AllowHexSpecifier,
                                                    null,
                                                    out result))
{
    // result == 3212592
}

答案 2 :(得分:2)

如果删除前导0x,则可以使用int.Parse

int a = int.Parse("1310530", NumberStyles.AllowHexSpecifier);

答案 3 :(得分:2)

Direct from SHanselman,正如Cristi Diaconescu指出的那样,但我已经包含了主要的源代码:

public static T GetTfromString<T>(string mystring)
{
   var foo = TypeDescriptor.GetConverter(typeof(T));
   return (T)(foo.ConvertFromInvariantString(mystring));
}

整篇文章值得仔细研究!

答案 4 :(得分:0)

在 Caverna 的回答的基础上进一步构建,我添加了一个 tryparse 方法,以便我们可以测试转换是否对某种类型有效。

public static T GetTfromString<T>(string mystring)
{
    var foo = TypeDescriptor.GetConverter(typeof(T));
    return (T)(foo.ConvertFromInvariantString(mystring));
}

public static bool TryGetTFromString<T>(string mystring, out T value)
{
    try
    {
        value = GetTfromString<T>(mystring);
        return true;
    }
    catch (FormatException)
    {
        value = default(T);
        return false;
    }
}