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