C#中从十六进制到int的转换不正确

时间:2013-03-05 13:44:27

标签: c# int hex

问题的原因是什么?我的方法返回不正确的int值。当我给它AB或DC的十六进制值或类似的东西时它返回int = 0但是当我给它一个十六进制= 22时它返回我int = 22.(虽然在这种情况下int应该是34)。

public int StatusBit(int Xx, int Rr)  {
        int Number;
        int.TryParse(GetX(Xx,Rr), out Number);
            return Number;
    }

我尝试使用Number = Convert.ToInt32(GetX(Xx,Rr));但它给出了相同的结果,但对于任何包含字母的内容,它都是null而不是0。

4 个答案:

答案 0 :(得分:4)

请改用Convert.ToInt32(string, int)。这样你就可以给出一个应该解释数字的基数。例如。

return Convert.ToInt32(GetX(Xx, Rr), 16);

(您也不检查TryParse的返回值,这会提示解析失败。)

如果您期望十进制和十六进制数字,则需要根据数字的外观进行分支,并使用基数10或基数16。如果你的十六进制数始终以0x开头,你可以使用以下几行:

string temp = GetX(Xx, Rr);
return Convert.ToInt32(temp, temp.StartsWith("0x") ? 16 : 10);

但这取决于你如何区分这两者(如果有的话)。如果一切都是十六进制的,那么当然没有这种需要。

答案 1 :(得分:4)

使用NumberStyles.HexNumber

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        string text = "22";
        int value;
        int.TryParse(text, NumberStyles.HexNumber, 
                     CultureInfo.InvariantCulture, out value);
        Console.WriteLine(value); // Prints 34
    }
}

顺便说一句,如果无法解析值,你真的想静默返回0吗?如果不是,请使用int.TryParse的返回值来确定解析是否成功。 (这就是原始代码中“AB”返回0的原因。)

答案 2 :(得分:1)

int.TryParse解析基数为10的整数。

使用Convert.ToUInt32(hex, 16)代替

答案 3 :(得分:0)

这是我的解决方案;

kTemp = int.Parse(xcc, System.Globalization.NumberStyles.HexNumber);
kTemp 上方的

是一个整数, xcc 是一个字符串。 xcc 可以是任何类似的东西; FE,10BA,FE0912 ......也就是说; xcc 是任意长度的十六进制字符串。 谨防;我没有用我的十六进制字符串获得 0x 前缀。