我通过执行以下代码将包含四个字节值的数组转换为32位数字:
a = [0, 16, 82, 0]
i = a.map { |e| "%02x" % e }.join.to_i(16)
# => 1069568
它可以按预期工作,但是我想知道是否还有一种更优雅的方式来执行此任务。也许不使用字符串。
答案 0 :(得分:6)
a = [0, 16, 82, 0]
a.pack('C4').unpack1('L>')
#=> 1069568
C4
表示8位无符号(4倍),L>
表示32位无符号(大端)。
但是,pack
返回一个二进制字符串,因此它不是无字符串的。
答案 1 :(得分:5)
如果您有一个字节,那将是原来的结果。如果在右侧添加一个字节,则会使原始结果向左移动两个位置(这意味着乘以0x100或16 ** 2 = 256),然后添加新的字节。您可以重复此次数,直到有字节为止。
a.inject{|acc, byte| acc * 0x100 + byte}
# => 1069568