我需要将一些 Ruby 代码翻译成 JavaScript 并遇到以下函数:
def sha1_hex(h)
Digest::SHA1.hexdigest([h].pack('H*'))
end
[h].pack('H*')
在这种情况下究竟是什么意思?它将如何转换为 JavaScript?
它将字符串解释为十六进制数字,每个字节两个字符,并将其转换为具有相应 ASCII 码的字符的字符串:
["464F4F"].pack('H*') # => "FOO", 0x46 is the code for 'F', 0x4F the code for 'O'
对于相反的转换,使用unpack
:
'FOO'.unpack('H*') # => ["464f4f"]
非 ASCII-8BIT 编码有点困难:
"á".encoding # => #<Encoding:UTF-8>
"á".unpack('H*') # => ["c3a1"]
['c3a1'].pack('H*') # => "\xC3\xA1"
['c3a1'].pack('H*').encoding # => #<Encoding:ASCII-8BIT>
['c3a1'].pack('H*').force_encoding('UTF-8') # => "á"