如何使用Ruby转换为signed int(4byte)

时间:2017-05-26 07:33:46

标签: ruby

我需要将跟随的4字节整数转换为有符号整数,如:

输入65535值-1 输入65534值-2 输入65533值-3 等等...

我尝试了以下内容:

 puts (65533).to_s(16) #=> fffd
 puts (65533).to_s(16).unpack('s') #=> doesn't work properly... return 26214

有人可以帮我处理上面的代码吗? 最诚挚的问候

1 个答案:

答案 0 :(得分:3)

您可以pack将其作为无符号整数,然后unpack将其作为有符号整数:

[65535, 65534, 65533].pack('S*').unpack('s*')
#=> [-1, -2, -3]

S / s表示16位整数,您也可以将L / l用于32位或Q / {{1}对于64位。