十六进制数字的BigInteger.Parse()给出负数

时间:2010-06-06 09:30:53

标签: parsing .net-4.0 hex biginteger

我已经开始使用.NET 4 System.Numerics.BigInteger Structure了,我遇到了问题。

我正在尝试解析包含没有符号的十六进制数字的字符串(正数)。我得到一个负数。

例如,我执行以下两个断言:

Assert.IsTrue(System.Int64.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "Int64");
Assert.IsTrue(System.Numerics.BigInteger.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "BigInteger");

第一个断言成功,第二个断言失败。我实际上在BigInteger中得到-8而不是8。

问题似乎是我十六进制从1位开始而不是0位(8和F之间的数字)。如果我添加前导0,一切都很完美。

这对我来说是不是很糟糕?这是BigInteger中的错误吗?

1 个答案:

答案 0 :(得分:11)

这正是该方法应该做的事情。

MSDN: BigInteger.Parse Method

  

“如果值是十六进制字符串,则为   Parse(String,NumberStyles)方法   将值解释为负数   使用二进制补码存储   表示如果它的前两个   十六进制数字大于或   等于0x80。换句话说,   method解释最高阶   值的第一个字节的位为   标志位。确保一个   十六进制字符串是正确的   解释为正数,   值的第一个数字必须具有值   零。例如,该方法   将0x80解释为负值,   但它解释为0x080或   0x0080为正值。“