2014-05-08 2 views
0

В Ruby 1.9.3, вы можете сделатьПереключение мало/большой порядок байт в распакованном() в Руби 1.8.7

"\x00\x01".unpack 'S' #=> 1 * 256 + 0 = 256, my machine use little endian by default 
    "\x00\x01".unpack 'S>' #=> 0 * 256 + 1 = 1 

Но Руби 1.8.7 не имеет ">" "<" аннотацию , Итак, в 1.8.7, что лучший способ сделать распаковку с большим эндиантом?

+0

У вас есть ваши примеры перепутаны? Вы поменяли байты 'x00' и' x01' bytes_and_ во втором примере, оба они равны 1. – matt

+0

Вы правы, исправлены. Благодарю. – user3580182

ответ

0
str = "\x00\x01" 
puts str.unpack 'S' 

p str.reverse 
puts str.reverse.unpack 'S' 


--output:-- 
256 
"\001\000" 
1 
+0

Вы должны действительно добавить некоторые объяснения. – Numeron

+0

Мой плохой. Я тоже рассматривал этот метод. Единственная нижняя сторона здесь - это то, что требует знания конечности машины. – user3580182

0

Вы можете использовать n для сети (больших) обратных порядок байт 2 байтовых значений (N для 4 байта INTS) и v для маленьких младших 2 байта целых чисел (V для 4 байта). См. the docs.

"\x00\x01".unpack 'n' 
# => [1] 
"\x00\x01".unpack 'v' 
# => [256] 

Вы действительно должны изучить возможность модернизации своей версии Ruby, если это возможно.

+0

Спасибо. Я должен был указать - есть ли такой способ сделать это для целых чисел со знаком? – user3580182

Смежные вопросы