如何在Ruby中将十六进制strign转换为32位signed int当量? 例如
a = "fb6d8cf1" #hex string
[a].pack('H*').unpack('l') #from the documentation it unpacks to its 32 bit signed int
转换为
-242455045
但实际答案是
-76706575
你能指出我做错了吗?
答案 0 :(得分:4)
好像你有一个字节序问题。这给出了期望的结果:
[a].pack("H*").unpack("l>")
# => [-76706575]
["038a67f90"].pack("H*").unpack("l>")
#=> [59402233]
答案 1 :(得分:3)
您可以自己翻转字节以绕过字节序并签署问题:
>> ['fb6d8cf1'.scan(/[0-9a-f]{2}/i).reverse.join].pack('H*').unpack('l')
=> [-76706575]
答案 2 :(得分:0)
使用:
class String
def to_si(base, lenght = 32)
mid = 2**(length-1)
max_unsigned = 2**length
n = self.to_i base
(n>=mid) ? n - max_unsigned : n
end
end
"fb6d8cf1".to_si 16, 32