快速构建十六进制在字符串中代表控制字符



i从应用程序的输出中有一个字符串序列,该序列在" x00"方法中打印控制字符。示例

x00R50x00x00x00x01

我一次检查一个字符并添加到字节数组中,将其转换为Scala字符串。

scala> val ar:Array[Byte]=Array(0,82,53,48,0,0,1)
ar: Array[Byte] = Array(0, 82, 53, 48, 0, 0, 1)
scala> val a = ar.map(_.toChar).mkString
a: String = ?R50???
scala>

这似乎很费力..是否有一种快速的方法将x00R50x00x00x00x01转换为上述val a

java.lang.String中有构造函数:

public String(byte bytes[]) 
scala> new String(Array[Byte](0, 82, 53, 48, 0, 0, 1))
res0: String = ?R50???

输入String只需要一次穿越一次,但是每个Match都经过了几个过渡。

val str = raw"x00R50x00x00x00x01"
raw"\x([0-9a-fA-F]{2})".r.replaceAllIn(str, m =>
    java.lang.Integer.parseInt(m.group(1),16).toChar.toString)
//res0: String = ?R50????

保留每个控制char的值。

最新更新