在Groovy中将整数转换为十六进制字符串

5

我刚接触Groovy。当我想将一些整数转换为十六进制字符串时,我尝试了以下代码:

theNumber.toString(16)

就像我在JavaScript中所做的那样。(Groovy就像另一种类似于Java的脚本语言,对吧?)

但是上面的代码并不能按照我的期望工作。当数字非常大时,结果是正确的;但是大多数情况下,它只返回16。

println(256.toString(16)) // 16
println(36893488147419103232.toString(16)) // 20000000000000000

我很困惑为什么Groovy的行为如此奇怪。有人能帮忙解释一下吗?另外,将整数转换为十六进制字符串的最佳方法是什么?

谢谢。

2个回答

10

Java不是JavaScript。 Groovy是为Java平台构建的语言。 Java代码也可以直接与Groovy一起使用。因此,您可以使用.toHexString()

Integer.toHexString(256) 
Long.toHexString(28562)

对于大于long类型的最大值(9223372036854775807)的数字,可以使用BigInteger数据类型。

String bigInt = new BigInteger("36893488147419103232").toString(16);

感谢您提供的转换解决方案。另一个问题是为什么256.toString(16)返回16而不是100 - tsh

3
你所说的是静态方法 toString(int),例如来自于Integer类。参考文档
public static String toString(int i)

Returns a String object representing the specified integer. The argument is converted to signed decimal representation and returned as a string, exactly as if the argument and radix 10 were given as arguments to the toString(int, int) method.

E.g.:

groovy:000> Integer.toString(16)
===> 16

所以您想要的是:
groovy:000> Integer.toString(256,16)
===> 100

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接