Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Откроется окно программирования Ruby ссылка на распаковку. Вот фрагмент:

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

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

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

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

Ответ 3

Шестнадцатеричный код char a равен 61.

Шаблон h2 - это шестнадцатеричная строка (сначала низкая nybble), h2 - это то же самое с высоким начальным размером.

Также см. документацию perl.