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