任何.NET Parse方法都可以处理前缀为“0x”的十六进制字符串吗?

时间:2010-06-02 13:07:42

标签: .net string parsing hex

我尝试使用.NET Int64.Parse方法解析数字,并且它不接受像“0x3039”这样的字符串,即使这是你在C#中编写常量的方式。该文档特别禁止字符串具有“0x”前缀,并且尾随“h”似乎也不起作用。

要解析十六进制数字,我必须使用System.Globalization.NumberStyles.HexNumber选项。

如果有人知道,Int64.Parse()无法接受带有“0x”前缀的字符串,请告知我们。

3 个答案:

答案 0 :(得分:17)

documentation给出了支持的数字格式的表达式,因此十六进制数字不允许使用前缀和后缀。

使用基数为16时,

Convert.ToInt32(String, Int32)支持前缀0x0X

答案 1 :(得分:2)

不,它不会接受0x。甚至有一个AllowHexSpecifier选项,但由于某种原因,这只是意味着a-f数字,仍然希望你剥离0x部分。

答案 2 :(得分:2)

很抱歉对一个旧问题的回答很晚,但这个问题是第一个出现在搜索" [.net] 0x前缀"。

的问题。

是的,至少有一组标准.NET函数可以正确处理以" 0X"开头的十六进制字符串。前缀。

从.NET framework 1.1开始,System.ComponentModel命名空间中的Int64Converter,Int32Converter,Int16Converter和ByteConverter类接受0X十六进制前缀作为字符串的一部分。

try
{
    // get integer value of strValue
    // assuming strValue has already been converted to uppercase e.g. by ToUpper()
    int intValue;
    if (strValue.StartsWith("0X"))
    {
        // support 0x hex prefix
        intValue = (Int16)new System.ComponentModel.Int16Converter().ConvertFromString(strValue);
    }
    else
    {
        // decimal
        intValue = int.Parse(strValue);
    }
}
catch (FormatException)
{
}

MSDN文档链接: https://msdn.microsoft.com/en-us/library/system.componentmodel.int16converter(v=vs.71).aspx