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。
使用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前缀与我的十六进制字符串