Java 用groovy实现多数据转换

Java 用groovy实现多数据转换,java,groovy,data-conversion,Java,Groovy,Data Conversion,我在对某些数据进行多次转换时遇到问题。 我从一个包含base64编码字节的请求中得到一个响应,我希望以十六进制获得它们 这是一种字符串类型: log.info "type data base 64 : " + dataBase64.getClass().getName() INFO:type data base 64 : java.lang.String 然后我解码它: data = dataBase64.decodeBase64() log.info "type data : " + da

我在对某些数据进行多次转换时遇到问题。 我从一个包含base64编码字节的请求中得到一个响应,我希望以十六进制获得它们

这是一种字符串类型:

log.info "type data base 64 : " + dataBase64.getClass().getName()
INFO:type data base 64 : java.lang.String
然后我解码它:

data = dataBase64.decodeBase64() 
log.info "type data : " + data.getClass().getName()

INFO:type data : [B  => ?? there is something strange here

log.info "data = " + data
INFO:data = [0, 33, 0, 0, -74, 0, 16, 0, 0, 1, 0, 10, 3, 0, 0, 0, 28, 120, -45, 28, 90, 95, 25, -14, -119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我需要以字节为单位的数据,以便恢复以字节22到24为单位的地址 如果我这样做

我想恢复
19f289
部件。问题是我无法将数据[22]转换为数据[24]
data[22]。encodeHex
失败(数据[22]类型为Byte,而不是Byte[])

如果我试图在每个需要的字节上使用toHexString,那么在处理负值时会遇到问题

for (i=22;i<25;i++)
{
    myInt = data[i]
    log.info Integer.toHexString(myInt) 
}
有什么干净的方法可以做到这一点吗? 我可以尝试在转换为字符串后从dataHex提取子字符串(我还没有尝试过),但我不明白为什么我可以简单地将一个字节转换为十六进制

如果有人知道

多亏了一位同事,我提高了对Groovy的了解,现在有一种更干净的方法来恢复我想要的数据:

dataHex = data.encodeHex().toString()
log.info "data hex in bytes = ${dataHex}"

// group data by bytes
def dataHexBy2 = dataHex.toList().collate(2)*.join()
log.info " group by 2 " + dataHexBy2

def address = ""

for (i=22;i<25;i++)
{
    address = address + dataHexBy2[i]
} 
log.info "address = ${address}"
dataHex=data.encodeHex().toString()
log.info“字节中的数据十六进制=${dataHex}”
//按字节分组数据
def dataHexBy2=dataHex.toList().collate(2)*.join()
log.info“分组依据2”+dataHexBy2
def address=“”
对于(i=22;iWell

多亏了一位同事,我提高了对Groovy的了解,现在有一种更干净的方法来恢复我想要的数据:

dataHex = data.encodeHex().toString()
log.info "data hex in bytes = ${dataHex}"

// group data by bytes
def dataHexBy2 = dataHex.toList().collate(2)*.join()
log.info " group by 2 " + dataHexBy2

def address = ""

for (i=22;i<25;i++)
{
    address = address + dataHexBy2[i]
} 
log.info "address = ${address}"
dataHex=data.encodeHex().toString()
log.info“字节中的数据十六进制=${dataHex}”
//按字节分组数据
def dataHexBy2=dataHex.toList().collate(2)*.join()
log.info“分组依据2”+dataHexBy2
def address=“”
对于(i=22;i
dataHex = data.encodeHex().toString()
log.info "data hex in bytes = ${dataHex}"

// group data by bytes
def dataHexBy2 = dataHex.toList().collate(2)*.join()
log.info " group by 2 " + dataHexBy2

def address = ""

for (i=22;i<25;i++)
{
    address = address + dataHexBy2[i]
} 
log.info "address = ${address}"