2017-05-26 20 views
2

我需要後續的4字節整數轉換成有符號整數,有符號整數(4字節),如:如何轉換到使用Ruby

輸入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 

有人能幫我上面的代碼? 問候

+0

這看起來很相關:https://stackoverflow.com/questions/9963702/hex-string-to-signed-int-conversion-in-ruby –

回答

3

你可以pack它作爲一個無符號整數,然後unpack它作爲一個符號整數:

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

S/s表示16位整數,你也可以使用L/l 32位或Q/q爲64位。