java - 将十六进制转换为 BigInteger

标签 java

我正在尝试将十六进制转换为大整数。基本上我有 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/

相关文章:

java - 使用 SQLiteOpenHelper 时进行 JOIN 查询的最佳方法是什么

java - 在 Java 中测试素数的最快方法是什么?

java - 在 SSL 套接字工厂连接中使用多个 key 对

java - 在其他类中找不到符号//变量

java - 如何显示具有多种布局的多个 JPanel?

java - 谁能解释为什么 listAdapter 不采用通用参数?

java - Hadoop ClassPath 单节点集群 Mac OS

java - 无法将 java.util.ArrayList 的实例反序列化出 VALUE_STRING

java - 无法使用 Ghost4J 加载库 'gs'

java - TCP 套接字 : readine hangs if used in while loop at Client : java