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

Ale*_*ang 19 c# hex integer

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

我已经尝试了int.TryParse(甚至int.TryParseSystem.Globalization.NumberStyles.Any),但它不起作用.

更新: 似乎Convert.ToInt64或Convert.ToInt32工作而不必删除尾随的"0x":

long hwnd = Convert.ToInt64("0x310530", 16);
Run Code Online (Sandbox Code Playgroud)

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

"如果fromBase为16,则可以将value参数指定的数字加上"0x"或"0X"前缀."

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

Han*_*ant 24

int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 13

来自MSDN:

NumberStyles.AllowHexSpecifier

表示数字字符串表示十六进制值.有效的十六进制值包括数字0-9和十六进制数字AF和af.使用此样式解析的字符串不能以 "0x"或"&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
}
Run Code Online (Sandbox Code Playgroud)

  • 看起来是一个可怕的名字,因为“0x”和“&H”是常见的十六进制说明符,但它们不被“允许”。诡异的。 (5认同)