在Groovy中,Ruby的string.unpack('N')等效于什么?

时间:2018-08-01 18:58:55

标签: ruby groovy

如何在Groovy中将字符串解码为32位无符号网络字节顺序整数?

在Ruby中,可以使用"this is string".unpack('N')

2 个答案:

答案 0 :(得分:3)

您可以使用Java NIO ByteBuffer类获得与Ruby "string".unpack('N')等效的版本。考虑以下示例:

import java.nio.ByteBuffer
import java.nio.ByteOrder

final String str = "lorem ipsum dolor sit amet"

final ByteBuffer buffer = ByteBuffer.wrap(str.bytes)
buffer.order(ByteOrder.BIG_ENDIAN)

final int result = buffer.getInt()

println result // 1819243109

这是Ruby的REPL中的"lorem ipsum dolor sit amet".unpack('N'),用于进行比较-https://repl.it/repls/TeemingIndigoHypotenuse

答案 1 :(得分:1)

以@ szymon-stepniak的答案为基础,这是一种通过元编程将其编写为unpack函数的方法:

import java.nio.*

String.metaClass.unpack {
    def s = delegate
    ByteBuffer.wrap(s.bytes).order(ByteOrder.BIG_ENDIAN).int
}

assert 1819243109 == "lorem ipsum dolor sit amet".unpack()