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

3

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

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

2个回答

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

在@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()

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