如何在Ruby中将整数拆分为2个字节的二进制文件?

时间:2019-03-01 11:56:19

标签: ruby ruby-on-rails-4

已准备好C#代码以将整数分成2个字节,如下所示,需要在Ruby中重新编写相同代码-

int seat2 = 65000;

//分成两个字节

    byte seats = (byte)(seat2 & 0xFF); // lower byte
    byte options = (byte)((seat2 >> 8) & 0xFF); // upper byte

下面是

上面的输出

输出座=> 232 选项=> 253

//合并回整数

        seat2 = (options << 8) | seats;

请建议任何人都有解决方案,可以用Ruby重写以上内容

3 个答案:

答案 0 :(得分:3)

您编写的代码只需很少的修改就可以在Ruby中很好地工作。

您可以尝试:

seat2 = 65000
seat2 & 0xFF
# => 232
(seat2 >> 8) & 0xFF
# => 253

一种替代方法是使用packunpack

[65000].pack('S').unpack('CC')
# => [232, 253]
[232, 253].pack('CC').unpack('S')
# => [65000]

答案 1 :(得分:2)

我相信Ruby中进行二进制转换的最惯用的方法是Array#packString#unpack(就像Eric's answer中一样)。

您还可以选择将Numeric#divmod与256(2 ^ 8,字节大小)一起使用:

> upper, lower = 65000.divmod(256)
# => [253, 232]
> upper
# => 253
> lower
# => 232

在这种情况下,要具有正确的字节数,您的Integer不得超过65535(2 ^ 16-1)。

答案 2 :(得分:1)

另一个:

lower, upper = 65000.digits(256)