Perl 6有类似Python的bytearray方法吗?

8

我在Raku的文档中找不到类似于Python中的bytearray方法。在Python中,bytearray定义如下:

class bytearray([source[, encoding[, errors]]])

返回一个新的字节数组。bytearray类是一个可变整数序列,范围在0 <= x < 256之间。它具有大多数常见的可变序列方法,这些方法在 可变序列类型 中进行了描述,以及大多数str类型具有的方法,请参阅字符串方法。 Raku是否应该提供此方法或某些模块?

2
请注意,在NativeCall模块中有CArray[int8] - Håkon Hægland
2个回答

10

我认为你正在寻找Buf - 一种可变的 (通常是无符号) 整数序列。使用 :bin 打开文件会返回一个 Buf


Perl 5中是否有类似于Buf的东西,或者类似于Python 2中的bytearray / Python 3中的bytes?(顺便说一句,提前祝贺你获得10万声望!) - cxw
在Perl 5中,您可以使用“:raw”读取输入。您将获得一个八位字节流。例如,JSON解析器需要UTF-8八位字节。除此之外,它可能值得拥有自己的问题。 - brian d foy

8
回答基本上是正确的。你可以将这段代码翻译成Perl6。
 my $frame = Buf.new; 
 $frame.append(0xA2); 
 $frame.append(0x01); 
 say $frame; # OUTPUT: «Buf:0x<a2 01>␤»

然而,声明并非相同:
bu = bytearray( 'þor', encoding='utf8',errors='replace')

在Python中,这与Perl 6中的等效内容相同。
my $bú =  Buf.new('þor'.encode('utf-8')); 
say $bú; # OUTPUT: «Buf:0x<c3 be 6f 72>␤» 

如果要使用与错误转换等效的东西,则由于Perl 6处理Unicode规范化的方式不同,您可能需要使用UTF8 Clean 8编码。

然而,对于大多数用途,我认为像brian d foy所指示的Buf是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接