【问题标题】:How do I split an integer into 2 byte binary in Ruby?如何在 Ruby 中将整数拆分为 2 字节二进制?
【发布时间】:2019-03-01 11:56:19
【问题描述】:

准备好 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 重写上述内容

【问题讨论】:

  • 你尝试了什么?
  • 另外,您可以在 Ruby 控制台中简单地尝试 seat2 = 65000seat2 &amp; 0xFF(seat2 &gt;&gt; 8) &amp; 0xFF。你会惊讶的!
  • 最短选项:upper, lower = 65000.divmod(256)
  • @PavelMikhailyuk:很好!
  • @EricDuminil 我们有许可算法,并且有两个参数席位和选项,每个变量携带一个字节,我们必须在不改变他的字节的情况下增加席位容量,然后我们决定使用席位和选项为了存储 65000 个数字,我们将数字分成 2 个字节,然后在获得该数字时将其合并回来。它根据人们发布的答案成功完成。感谢大家为我节省了时间。

标签: ruby ruby-on-rails-4


【解决方案1】:

您编写的代码只需很少修改即可在 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]

【讨论】:

  • 谢谢 Eric,这正是我想要的。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    另一个:

    lower, upper = 65000.digits(256)
    

    【讨论】:

    • 请注意,对于值 ,您可以获得 nil
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2022-01-13
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多