2016-11-13 60 views
0

我试图了解这一行的Ruby代码:要转换红宝石解压相当于在Java中

token.unpack('m0').first.unpack('H*').first 

其转换

R1YKdH//cZKubZlA09ZIVZQ5/cxInvmokIACnl3MKJ0= 

47560a747fff7192ae6d9940d3d648559439fdcc489ef9a89080029e5dcc289d 

至于我明白这一点,它是base64到十六进制转换,但是当我尝试做同样的事情时,它与转换的不匹配。

我需要在Java中实现相同的功能。

回答

1

所以我打算打破这个。第一步是token.unpack('m0')。根据Idiosyncratic Rubyunpack('m0')将解码base64,类似于内置的Base64库的Base64.decode64(string)函数。但unpack在这里返回一个arry,只有1个元素,转换后的base64。所以我们使用token.unpack('m0').first来得到由token.unpack('m0')返回的数组中的第一个(在这个例子中是唯一的)元素。如果这是全部,那么你就说这只是base64而已。但是,解压后的base64会再次解压缩,这次是'H*',它会将字符转换为十六进制。最后,因为它会返回一个数组,所以再次使用它只是一个字符串。

因此,总之,发生的事情是,首先你的字符串正在从base64解码为一个字符串,然后它被转换为十六进制。

+0

非常感谢。 :) –

+1

没问题!感谢您提出一个清晰,结构良好的问题,使答案更容易写出来! – thesecretmaster