2

问题的原因可能是什么?我的方法返回不正确的 int 值。当我给它 AB 或 DC 或类似的十六进制值时,它返回 int = 0 但是当我给它一个 hex = 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

4 回答 4

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);

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

于 2013-03-05T13:46:54.187 回答
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 的原因。)

于 2013-03-05T13:49:54.917 回答
1

int.TryParse解析一个以 10 为底的整数。

Convert.ToUInt32(hex, 16)改为使用

于 2013-03-05T13:47:16.967 回答
0

这是我的解决方案;

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

上面的kTemp是一个整数,而xcc是一个字符串。 xcc可以是任何东西;FE、10BA、FE0912……也就是说;xcc是任意长度的十六进制字符串。谨防; 我的十六进制字符串没有得到0x前缀。

于 2016-10-27T08:21:51.477 回答