gpt4 book ai didi

parsing - BigInteger.Parse() 对十六进制数给出负数

转载 作者:行者123 更新时间:2023-12-02 18:52:45 31 4
gpt4 key购买 nike

我已经开始使用 .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 之间的数字(包括 8 和 F)开头)开始时。如果我添加前导 0,一切都会完美运行。

我的使用方式很糟糕吗?这是 BigInteger 中的错误吗?

最佳答案

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

MSDN: BigInteger.Parse Method :

"If value is a hexadecimal string, the Parse(String, NumberStyles) method interprets value as a negative number stored by using two's complement representation if its first two hexadecimal digits are greater than or equal to 0x80. In other words, the method interprets the highest-order bit of the first byte in value as the sign bit. To make sure that a hexadecimal string is correctly interpreted as a positive number, the first digit in value must have a value of zero. For example, the method interprets 0x80 as a negative value, but it interprets either 0x080 or 0x0080 as a positive value."

关于parsing - BigInteger.Parse() 对十六进制数给出负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2983706/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com