我正在使用一个使用python SWIG模块的项目。该模块具有以下功能:
void func(char* pin, unsigned long len);
并从python中调用,如下所示:
key = "\x42\x1d\xd7"
modul.func(key)
奇怪的是传入数组的大小是4而不是3.最后一个字符(d7)被转换为两个字符(c3 97)。我注意到如果字节具有最高位设置,则它以两个字节扩展。我想这与字符串编码等有关。
是否有另一种传递方式" \ x42 \ x1d \ xd7"到SWIG模块功能?
换句话说:我需要一种在python中创建字符串的方法,这种方法有点格式错误。它只需要3个字节[0x42,0x1d,0xd7]
答案 0 :(得分:0)
你的意思是说你希望在没有被转换为unicode的情况下传递\x42\x1d\xd7
吗?
您的案例中的问题是因为\x42\x1d\xd7
在传递给modul.func()
时转换为'utf-8'。
您可以通过执行 -
进行测试key = "\x42\x1d\xd7"
key.encode('utf-8').decode('unicode-escape')
>> 'B\x1d\xc3\x97'
对于您的问题,您可以通过python停止key
变量的编码/解码,方法是将r
附加到字符串的定义中,如下所示 -
key = r"\x42\x1d\xd7"
这告诉python解释器读取字符串raw
。试试吧。