hex字符串到Ruby中的signed int转换
如何在Ruby中将hexstrign转换为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
你能指出我做错了什么吗?
您可以自己翻转字节以绕过字节序并签署问题:
>> ['fb6d8cf1'.scan(/[0-9a-f]{2}/i).reverse.join].pack('H*').unpack('l') => [-76706575]
好像你有一个endian问题。 这给出了期望的结果:
[a].pack("H*").unpack("l>") # => [-76706575] ["038a67f90"].pack("H*").unpack("l>") #=> [59402233]
使用:
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