什么是。pack(’H *’)是什么意思?

我需要将一些Ruby代码翻译成JavaScript并遇到以下函数:

def sha1_hex(h) Digest::SHA1.hexdigest([h].pack('H*')) end 

在这种情况下, [h].pack('H*')究竟是什么意思? 它将如何转换为JavaScript?

它将字符串解释为hex数字,每个字节两个字符,并将其转换为带有相应ASCII代码的字符串:

 ["464F4F"].pack('H*') # => "FOO", 0x46 is the code for 'F', 0x4F the code for 'O' 

对于相反的转换,请使用unpack

 'FOO'.unpack('H*') # => ["464f4f"] 

对于非ASCII-8BIT编码,这有点困难:

 "á".encoding # => # "á".unpack('H*') # => ["c3a1"] ['c3a1'].pack('H*') # => "\xC3\xA1" ['c3a1'].pack('H*').encoding # => # ['c3a1'].pack('H*').force_encoding('UTF-8') # => "á"