Как работает string.unpack в Ruby?

Может кто-нибудь объяснить, почему, как вычисляется результат для следующей распаковки?

"aaa".unpack('h2H2')               #=> ["16", "61"]

В двоичном виде «а» = 0110 0001. Яя не уверен, какh2' может стать 16 (0001 0000) или 'H2' может стать 61 (0011 1101).

Ответы на вопрос(3)

a 61

шаблонh2 является шестнадцатеричной строкой (сначала низкий nybble),H2 то же самое с высоким клевом в первую очередь.

Также см.Perl документация.

Решение Вопроса

а затем 6. h дает шестнадцатеричное значение каждого клева, поэтому вы получаете 0110 (6), затем 0001 (1), в зависимости от того, является ли вы старшим или младшим битомсмотрю на. Сначала используйте высокий клев, и вы получите 61, что является шестнадцатеричным для 97 - значение «а»

ссылка на распаковке. Вот'фрагмент:

Декодирует str (который может содержать двоичные данные) в соответствии со строкой формата, возвращая массив каждого извлеченного значения. Строка формата состоит из последовательности односимвольных директив, обобщенных в таблице 22.8 на стр. 379. За каждой директивой может следовать число, указывающее количество повторений этой директивы. Звездочка ("*") будет использовать все оставшиеся элементы. Директивы sSIILL могут сопровождаться подчеркиванием ("_")) использовать базовую платформуs собственный размер для указанного типа; в противном случае он использует независимый от платформы постоянный размер. Пробелы игнорируются в строке формата. Смотрите также Array # pack на стр. 286.

И соответствующие символы из вашего примера:

H Извлечь шестнадцатеричные кусочки из каждого персонажа (самый значительный первый).

h Извлечь шестнадцатеричные кусочки из каждого символа (наименее значимый первый).

Ваш ответ на вопрос