Преобразуйте необработанную строку в массив слов с прямым порядком байтов с помощью Ruby - PullRequest
2 голосов
/ 02 мая 2010

Я хотел бы преобразовать необработанную строку в массив слов с прямым порядком байтов.

Как пример, вот функция 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;
}

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

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

Спасибо за любую помощь.

Привет

1 Ответ

2 голосов
/ 02 мая 2010

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

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

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

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

...