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

Posted

技术标签:

【中文标题】在 Groovy 中将整数转换为十六进制字符串【英文标题】:Convert integer to hex string in Groovy 【发布时间】:2016-12-03 14:22:51 【问题描述】:

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

theNumber.toString(16)

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

但上面的代码没有按我的预期工作。当数量很大时,结果是正确的;但大多数时候,它只返回 16。

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

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

谢谢。

【问题讨论】:

【参考方案1】:

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【参考方案2】:

您所调用的是静态 toString(int) 来自例如Integer。 docs:

public static String toString(int i)

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

例如:

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

所以你想要的是:

groovy:000> Integer.toString(256,16)
===> 100

【讨论】:

以上是关于在 Groovy 中将整数转换为十六进制字符串的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Android 中将颜色整数转换为十六进制字符串?

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

在 Python 中将整数转换为 2 字节的十六进制值

如何在 Python 中将字符串转换为十六进制整数?

如何在 Objective C 中将十六进制数转换为整数和字符串?