将字符串转换为每个字节的十六进制列表 (Raku)

tin*_*ino 5 raku

FAQ:在 Raku 中,如何将字符串转换为其十六进制的字节列表(即十六进制解码器)

目前,我有:

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

这是4个操作

Jon*_*ton 8

问题中的方式非常好。由于无论如何map都会强制转换为 a list,因此可以删除显式.list强制,给出:

say "I ? ".encode.map(*.base(16));
Run Code Online (Sandbox Code Playgroud)

由于.base是纯操作,因此与>>超级操作符一起使用也是安全的,它也将列出:

say "I ? ".encode>>.base(16);
Run Code Online (Sandbox Code Playgroud)

如果我有点吹毛求疵,请注意“将字符串转换为其字节列表”是未指定的,而不涉及编码。默认值为 UTF-8,因此encode会将字符串转换为该字符串。在 Raku 中,内存中字符串的字节级表示不是语言的定义方面,并且字符串是一种不透明的数据类型。实现可以自由选择它认为合适的任何底层表示(MoarVM 至少有 3 种方法可以在内部对字符串进行建模),但是作为语言用户,您永远不会看到这一点。

  • @ElizabethMattijsen 对于调试,你无论如何都可以“gist”“Buf”;否则,每次我在实际环境中完成此操作时,通常都会有许多其他有关行分割的格式化决策,想要在侧面进行非十六进制解释等。 (2认同)