2016-07-29 269 views
2

我是Groovy的新手。当我想要将某些整数转换为十六进制字符串时,我尝试过这样的代码:在Groovy中将整数转换为十六进制字符串

theNumber.toString(16) 

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

但上面的代码不工作,因为我的预期。当数字非常大时,结果是正确的;但大多数时候,它只是返回16.

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

我很困惑为什么Groovy行为这么奇怪。任何人都可以帮我解释一下吗?而且,将整数转换为十六进制字符串的最佳方法是什么?

谢谢。

回答

4

Java不是JavaScript。 Groovy是为Java平台构建的语言。 Java代码也可以直接与Groovy协同工作。所以,你可以使用.toHexString()

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

对于除能用多长时间(9223372036854775807)的数据类型的BigInteger的最大值较大的数字。

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

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

1

您打电话给的是静态的toString(int),例如: Integer。​​:

public static String toString(int i) 

返回一个表示指定整数一个字符串对象。该参数被转换为带符号的十进制表示并作为字符串返回,就好像将参数和基数10作为toString(int,int)方法的参数一样给出。

例如为:

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

所以,你想要的是:

groovy:000> Integer.toString(256,16) 
===> 100 
相关问题