7
我需要一些Ruby代码转换为JavaScript和遇到下列函数来了:[“string”]。pack('H *')是什么意思?
def sha1_hex(h)
Digest::SHA1.hexdigest([h].pack('H*'))
end
究竟是什么意思[h].pack('H*')
在这种情况下?它将如何转化为JavaScript?
我需要一些Ruby代码转换为JavaScript和遇到下列函数来了:[“string”]。pack('H *')是什么意思?
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') # => "á"
.pack('H')将数组的内容打包为十六进制字符串。 – daustin777
['pack'](http://www.ruby-doc.org/core-2.0/Array.html#method-i-pack)和['unpack'](http://ruby-doc.org /core-2.0/String.html#method-i-unpack)方法是有据可查的。 –
我看过文档,但是“十六进制字符串(高半字节)”对我来说没有多大意义。 – user2398029