Scala十六进制字符串到字节

Max*_*wer 5 scala protocol-buffers

在Scala中有一种巧妙的方法可以将十六进制编码String转换为protobuf ByteString(并再次返回)吗?

Fed*_*tta 7

您可以使用(没有其他依赖项)DatatypeConverter:

import com.google.protobuf.ByteString
import javax.xml.bind.DatatypeConverter
val hexString: String = "87C2D268483583714CD5"
Run Code Online (Sandbox Code Playgroud)
val byteString: ByteString = ByteString.copyFrom(
  DatatypeConverter.parseHexBinary(hexString)
)
Run Code Online (Sandbox Code Playgroud)
val originalString = DatatypeConverter.printHexBinary(byteString.toByteArray)
Run Code Online (Sandbox Code Playgroud)


ste*_*ino 5

您可以使用java.math.BigInteger解析 a String,获取Array[Byte]并从那里将其转换为 a ByteString。这是第一步:

import java.math.BigInteger

val s = "f263575e7b00a977a8e9a37e08b9c215feb9bfb2f992b2b8f11e"

val bs = new BigInteger(s, 16).toByteArray
Run Code Online (Sandbox Code Playgroud)

现在的内容bs是:

Array(0, -14, 99, 87, 94, 123, 0, -87, 119, -88, -23, -93, 126, 8, -71, -62, 21, -2, -71, -65, -78, -7, -110, -78, -72, -15, 30)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用(例如)方法(此处为copyFromJavaDoc )将其转换为.ByteString