2017-11-21 7 views
1

Ich habe ein Problem, einige Konvertierungen für einige Daten. Ich bekomme eine Antwort von einer Anfrage, die Base64-kodierte Bytes enthält und ich möchte sie in Hexa bekommen.Mehrere Datenkonvertierung mit groovy

Dies ist ein String-Typ:

log.info "type data base 64 : " + dataBase64.getClass().getName() 
INFO:type data base 64 : java.lang.String 

Dann dekodieren ich es:

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] 

ich diese Daten in Bytes wollen, um eine Adresse in Bytes zu erholen 22 bis 24 Wenn ich tun

log.info "dataHex = " + data.encodeHex() 
INFO:dataHex = 00210000b60010000001000a030000001c78d31c5a5f19f289ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01000000000000000000000000000000000000000000000000000000000000000000000000000000 

ich möchte den 19f289 Teil erholen. Das Problem ist, dass ich keine Daten [22], um Daten konvertieren [24] data[22].encodeHex ausfallen (die Daten [22] Typ Byte ist das Byte nicht [])

Wenn ich versuche, toHexString auf jedes Byte erforderlich zu verwenden, I ein Problem auftritt, wenn negative Werte

for (i=22;i<25;i++) 
{ 
    myInt = data[i] 
    log.info Integer.toHexString(myInt) 
} 

gibt

INFO:19 
INFO:fffffff2 
INFO:ffffff89 
Handhabung

gibt es eine saubere Art und Weise, dies zu tun? Ich könnte versuchen, den Teil von dataHex nach der Umwandlung in String zu extrahieren (ich habe es noch nicht ausprobiert), aber ich verstehe nicht, warum ich einfach ein Byte umwandeln kann

auf hexadezimal, wenn jemand weiß, ...

Antwort

0

Nun,

nach meinem Wissen von Groovy dank einen Kollegen zu verbessern, hier ist ein sauberer Weg, um die Daten, die ich mag zu erholen:

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}" 

und ich endlich Adresse = 19f289

erhalten