2010-05-02 1 views
2

Я хотел бы преобразовать необработанную строку в массив слова big-endian.Преобразовать необработанную строку в массив слова big-endian с Ruby

В качестве примера, здесь есть функция JavaScript, что делать это хорошо (Пол Джонстон):

/* 
* Convert a raw string to an array of big-endian words 
* Characters >255 have their high-byte silently ignored. 
*/ 
function rstr2binb(input) 
{ 
    var output = Array(input.length >> 2); 
    for(var i = 0; i < output.length; i++) 
    output[i] = 0; 
    for(var i = 0; i < input.length * 8; i += 8) 
    output[i>>5] |= (input.charCodeAt(i/8) & 0xFF) << (24 - i % 32); 
    return output; 
} 

Я считаю, что эквивалентно рубин может быть String#unpack(format).

Однако, я не знаю, какой должен быть правильный формат параметр.

Благодарим за помощь.

С уважением

ответ

2

Я думаю, вы должны быть размещены несколько примеров входных/выходных пар. Вот код, который дает мне тот же результат, как ваш код JS в Chrome:

/* JS in Chrome: */ 
rstr2binb('hello world!') 
[1751477356, 1864398703, 1919706145] 

# irb, Ruby 1.9.1: 
'hello world!'.unpack('N*') 
#=> [1751477356, 1864398703, 1919706145] 

Однако я не уверен, что это даст те же результаты, если вы попробуете его на некоторых персонажей мультибайтных, unpack не следует игнорирование ничего ,

+0

Спасибо, Младен Ябланович! –