gpt4 book ai didi

java - 将十六进制转换为 BigInteger

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:05 25 4
gpt4 key购买 nike

我正在尝试将十六进制转换为大整数。基本上我有 32 个字符 = 16 个字节,所以我希望 BigInteger 也有 16 个字节,但在某些情况下,即十六进制以 99 开头。它会生成额外的字节 0。我正在使用

new BigInteger(hex, 16)

如何避免第 17 个字节?

最佳答案

来自 BigInteger's javadoc :

Immutable arbitrary-precision integers. All operations behave as if BigIntegers were represented in two's-complement notation (like Java's primitive integer types).

description of the constructor you are using :

Translates the String representation of a BigInteger in the specified radix into a BigInteger. The String representation consists of an optional minus or plus sign followed by a sequence of one or more digits in the specified radix. The character-to-digit mapping is provided by Character.digit. The String may not contain any extraneous characters (whitespace, for example).

这意味着,如果您使用 new BigInteger( "99000000000000000000000000000000", 16) 调用它,您将获得一个 BigInteger,它保存该值(这是一个正值),就好像它以二进制表示一样-补码。二进制补码中的正值不适合 16 个字节,因此最终结果当然是 17 个字节长。

如果你调用它的值介于(包括两者)之间,你保证得到一个最大为 16 字节的 BigInteger:

 - new BigInteger( "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 16)
- new BigInteger("-80000000000000000000000000000000", 16)

任何大于第一个或小于最后一个的值都将导致超过 16 个字节。

关于java - 将十六进制转换为 BigInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32269399/

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