有没有zerocopy方法可以从memoryview创建bytearray?

2024-05-29 04:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个我认为非常简单的问题(我希望是这样!),即从内存中取出原始数据,并将其解码为Unicode字符串

这样做是显而易见的方法,并且有效:

the_string = mv.tobytes().decode("utf-8")

其中mv是有问题的memoryview。但是,这违背了零拷贝的目的,因为拷贝是由tobytes()方法生成的。因此,下一步要尝试的是将memoryview“投射”到bytearray。换句话说,创建一个bytearray,它使用内存视图“mv”作为其备份数据。我以为这很简单,但我不知道怎么做。有人知道怎么做吗


Tags: the方法内存字符串原始数据stringunicode解码
1条回答
网友
1楼 · 发布于 2024-05-29 04:28:04

答案是stdlib中的^{}

例如:

>>> b = "Hello 你好".encode("utf-8")
>>> b
b'Hello \xe4\xbd\xa0\xe5\xa5\xbd'

>>> m = memoryview(b)
>>> m.decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'memoryview' object has no attribute 'decode'

>>> import codecs
>>> codecs.decode(m, "utf-8")
'Hello 你好'
>>> codecs.decode(m[:-3], "utf-8")
'Hello 你'

相关问题 更多 >

    热门问题