Ruby распаковать в шестнадцатеричное представление нескольких 8-битных адресов? - PullRequest
1 голос
/ 20 октября 2011

Я читаю файл, который выглядит следующим образом:

0025be60  24 b3 10 80 00 b4 10 80  a4 b4 10 80 08 b5 10 80  |$...............|
0025be70  94 b5 10 80 9c b7 10 80  40 b9 10 80 e4 b9 10 80  |........@.......|
0025be80  e0 bf 10 80 94 c0 10 80  f4 cc 10 80 54 cd 10 80  |............T...|
0025be90  44 d9 10 80 88 d9 10 80  30 da 10 80 88 db 10 80  |D.......0.......|
0025bea0  44 dc 10 80 d0 e3 10 80  6c e6 10 80 d0 e8 10 80  |D.......l.......|

, но мне трудно преобразовать его в массив шестнадцатеричных переменных.Я хотел бы следующее:

x = [0x24b31080, 0x00b41080, 0xa4b41080, 0x08b51080 ...

, но у меня проблема.Я думал, что file_contents.unpack ("H8 *) будет работать, но это только вернет первое значение ... Есть какие-нибудь эксперты по распаковке?

1 Ответ

1 голос
/ 20 октября 2011

Вам придется преобразовывать данные немного больше.Один из способов сделать это - использовать gsub в вашем входном потоке для удаления пробелов.Это показано здесь:

lines.collect do |line|
  line.gsub(/ /, '').unpack('H8H8H8')
end

Если вы хотите игнорировать часть строки, вы всегда можете выделить ее немного лучше:

lines.collect do |line|
  line[10, 48].gsub(/ /, '').unpack('H8H8')
end.flatten

Это занимает 48 символов, начиная со смещения10 в строке и распаковка тех.flatten в конце преобразует двухуровневую структуру массива в один уровень.

...