我有一堆二进制数据通过某个 C 接口(不在我的控制之下)通过 char* 传送到 python,所以我有一个任意二进制数据的字符串(通常是字节数组)。我想将它转换为字节数组以简化它与其他 python 函数的使用,但我似乎无法弄清楚如何。
不起作用的例子:
data = rawdatastr.encode()
这假定为“utf-8”并破坏数据== BAD
data = rawdatastr.encode('ascii','ignore')
剥离超过 127 个字符 == 错误
data = rawdatastr.encode('latin1')
不确定——这是迄今为止最接近的,但我没有证据表明它适用于所有字节。
data = array.array('B', [x for x in map(ord,data)]).tobytes()
这可行,但似乎要做很多简单的工作。有没有更简单的东西?
我在想我需要编写自己的身份编码来传递字节(我 认为 latin1 基于一些阅读但到目前为止没有证据来做到这一点)。
原文由 nickdmax 发布,翻译遵循 CC BY-SA 4.0 许可协议
虽然我怀疑其他东西正在为你解码你的数据(C 中的
char*
通常最好表示为bytes
,特别是如果它是二进制数据):latin1
编解码器可以往返每个字节。您可以使用以下短程序验证这一点: