字节数组到num

时间:2011-07-19 11:06:12

标签: ruby endianness

我有例如

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

然后我想将此表转换为整数

0x15b83c51 = 363323840

任何想法?

4 个答案:

答案 0 :(得分:1)

可能的解决方案:

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

答案 1 :(得分:0)

我对ruby中的位/十六进制函数不是很熟悉,如果它不是更具体或更准确,那就很抱歉,但是......你试过:

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

答案 2 :(得分:0)

tab.reverse.inject {|s,a| (s<<8) + a}
# => 364395601

答案 3 :(得分:0)

(我不知道你是如何从363323840获得0x15b83c51的。与已经回复的其他人一样,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