Преобразовать строку в список шестнадцатеричного списка каждого байта (Raku) - PullRequest
5 голосов
/ 26 марта 2020

FAQ: в Raku, как преобразовать строку в список ее шестнадцатеричных байтов (т.е. шестнадцатеричный декодер)

В настоящее время у меня есть:

say "I ❤ ?".encode.list.map(*.base(16));  # (49 20 E2 9D A4 20 F0 9F A6 8B)

Что составляет 4 операции

1 Ответ

8 голосов
/ 26 марта 2020

Способ в вопросе в значительной степени хорошо. Так как map в любом случае приведет к list, можно отбросить явное приведение .list, получив:

say "I ❤ ?".encode.map(*.base(16));

Поскольку .base - чистая операция, ее также можно использовать безопасно. с гипероператором >>, который также выдаст listify:

say "I ❤ ?".encode>>.base(16);

Если я немного придираюсь, обратите внимание, что «преобразовать строку в список ее байтов» не указано, не говоря о кодирование. По умолчанию используется UTF-8, поэтому encode преобразует строку в эту. В Raku представление строк в памяти на уровне байтов не является определенным аспектом языка, а строки представляют собой непрозрачный тип данных. Реализация может свободно выбирать любое лежащее в ее основе представление (у MoarVM есть как минимум 3 способа внутреннего моделирования модели строки), однако, как пользователь языка, вы никогда не увидите этого.

...