2011-07-19 45 views
0

我有例如阵列字节为num

tab = [0x51, 0x3c, 0xb8, 0x15] 

然后我想转换此表为整数

0x15b83c51 = 363323840 

什么想法?

回答

0

我不是很熟悉红宝石位/十六进制的功能,很抱歉,如果它不是更具体的或准确的,但是......你试图:

bitnum = 0 
while hexnum = tab.pop do 
    # 1. convert hexnum to binary format 
    # 2. bit-shift bitnum accordingly 
end 
1

可能的解决方案:

> tab.reverse.inject("") {|s,a| s<<a.to_s(16) }.to_i(16) 
=> 364395601 
0
tab.reverse.inject {|s,a| (s<<8) + a} 
# => 364395601 
0

(我不知道你如何从0x15b83c51363323840。像其他人已经回答了,0x15b83c51364395601

这是另一种解决方案,如果您的表中有多个要解码的整数,这也是有效的。

# Convert to binary string 
binaryString = [0x51, 0x3c, 0xb8, 0x15].map(&:chr).join 

# Convert the binary string to an unsigned integer array 
# and take its first element 
number = binaryString.unpack("I").first