Как разделить целое число на двоичный байт в Ruby? - PullRequest
0 голосов
/ 01 марта 2019

Имеется готовый код 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 голосов
/ 01 марта 2019

Я считаю, что самый идиоматический способ для бинарных преобразований в Ruby - это Array#pack и String#unpack (как в ответ Эрика ).

Также у вас есть возможность использовать Числовой # divmod с 256 (2 ^ 8, размер байта):

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

В этом случае, чтобы иметь правильные байты, ваше Integerне должно превышать 65535 (2 ^ 16-1).

0 голосов
/ 01 марта 2019

Еще один:

lower, upper = 65000.digits(256)
0 голосов
/ 01 марта 2019

Код, который вы написали, будет хорошо работать в 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]
...