将字符串转换为每个字节的十六进制列表 (Raku)
Convert a string to list of hexadecimal of each byte (Raku)
常见问题解答:在 Raku 中,如何将字符串转换为其十六进制字节列表(即十六进制解码器)
目前,我有:
say "I ❤ ".encode.list.map(*.base(16)); # (49 20 E2 9D A4 20 F0 9F A6 8B)
也就是4次操作
题中的方式很好。由于 map
无论如何都会强制转换为 list
,但是,可以放弃显式的 .list
强制转换,给出:
say "I ❤ ".encode.map(*.base(16));
由于 .base
是一个纯操作,它也可以安全地与 >>
超级运算符一起使用,它也会列出:
say "I ❤ ".encode>>.base(16);
如果我有点吹毛求疵,请注意 "convert a string to the list of its bytes" 在不讨论编码的情况下未指定。默认为 UTF-8,因此 encode
会将字符串转换为 UTF-8。在 Raku 中,字符串在内存中的字节级表示不是语言的定义方面,字符串是一种不透明的数据类型。一个实现可以自由选择它认为合适的任何底层表示(MoarVM 至少有 3 种方法在内部对字符串进行建模),但是作为语言用户,您永远看不到这一点。
常见问题解答:在 Raku 中,如何将字符串转换为其十六进制字节列表(即十六进制解码器)
目前,我有:
say "I ❤ ".encode.list.map(*.base(16)); # (49 20 E2 9D A4 20 F0 9F A6 8B)
也就是4次操作
题中的方式很好。由于 map
无论如何都会强制转换为 list
,但是,可以放弃显式的 .list
强制转换,给出:
say "I ❤ ".encode.map(*.base(16));
由于 .base
是一个纯操作,它也可以安全地与 >>
超级运算符一起使用,它也会列出:
say "I ❤ ".encode>>.base(16);
如果我有点吹毛求疵,请注意 "convert a string to the list of its bytes" 在不讨论编码的情况下未指定。默认为 UTF-8,因此 encode
会将字符串转换为 UTF-8。在 Raku 中,字符串在内存中的字节级表示不是语言的定义方面,字符串是一种不透明的数据类型。一个实现可以自由选择它认为合适的任何底层表示(MoarVM 至少有 3 种方法在内部对字符串进行建模),但是作为语言用户,您永远看不到这一点。