在java中转换ruby unpack等效项

时间:2016-11-13 07:43:58

标签: java ruby ruby-on-rails-3 unpack

我正在尝试理解这行红宝石代码:

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

正在转换

R1YKdH//cZKubZlA09ZIVZQ5/cxInvmokIACnl3MKJ0=

47560a747fff7192ae6d9940d3d648559439fdcc489ef9a89080029e5dcc289d

据我所知,它是base64到hex转换,但是当我尝试做同样的事情时,它与转换后的不匹配。

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

1 个答案:

答案 0 :(得分:1)

所以我要打破这个。第一步是token.unpack('m0')。根据{{​​3}} unpack('m0')将解码base64,类似于内置的Base64 libararies Base64.decode64(string)函数。但unpack在这里返回arry,只有1个元素,转换后的base64。因此,我们使用token.unpack('m0').first来获取token.unpack('m0')返回的数组的第一个(在本例中是唯一的)元素。如果这就是全部,那么你说它只是base64是正确的。但是,解压缩的base64再次解压缩,这次使用Idiosyncratic Ruby,它将字符转换为十六进制。最后,因为那将返回一个数组,你再次使用它再使它只是一个字符串。

总而言之,正在发生的事情是,首先将字符串从base64解码为字符串,然后将其转换为十六进制。