十六进制字符串到Ruby中的signed int转换

Pav*_*n K 6 ruby

如何在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
Run Code Online (Sandbox Code Playgroud)

它转换为

-242455045
Run Code Online (Sandbox Code Playgroud)

但实际的答案是

-76706575 
Run Code Online (Sandbox Code Playgroud)

你能指出我做错了什么吗?

mu *_*ort 3

您可以自己翻转字节来解决字节序和符号问题:

>> ['fb6d8cf1'.scan(/[0-9a-f]{2}/i).reverse.join].pack('H*').unpack('l')
=> [-76706575]
Run Code Online (Sandbox Code Playgroud)