已准备好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重写以上内容
答案 0 :(得分:3)
您编写的代码只需很少的修改就可以在Ruby中很好地工作。
您可以尝试:
seat2 = 65000
seat2 & 0xFF
# => 232
(seat2 >> 8) & 0xFF
# => 253
一种替代方法是使用pack
和unpack
:
[65000].pack('S').unpack('CC')
# => [232, 253]
[232, 253].pack('CC').unpack('S')
# => [65000]
答案 1 :(得分:2)
我相信Ruby中进行二进制转换的最惯用的方法是Array#pack
和String#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)