c#中十六进制到整型的转换不正确

本文关键字:转换 不正确 整型 十六进制 | 更新日期: 2023-09-27 18:02:13

这个问题的原因是什么?我的方法返回不正确的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。

c#中十六进制到整型的转换不正确

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

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

使用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的原因。)

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

Convert.ToUInt32(hex, 16)代替

这是我的解决方案;

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

kTemp

是一个整数,xcc是一个字符串。xcc可以是;Fe, 10ba, fe0912…这就是说;xcc是任意长度的十六进制字符串。当心;我没有得到0x前缀与我的十六进制字符串