python swig字符串到字符*的转换

python swig字符串到字符*的转换,python,c,string,swig,Python,C,String,Swig,我正在处理一个使用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”传递给

我正在处理一个使用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]

您的意思是说您希望传递
\x42\x1d\xd7
,而不将其转换为unicode

本例中的问题是因为在传递到
modul.func()
时,
\x42\x1d\xd7
被转换为“utf-8”

您可以通过执行以下操作来测试这一点:

key = "\x42\x1d\xd7"
key.encode('utf-8').decode('unicode-escape')
>> 'B\x1d\xc3\x97'
对于您的问题,您可以停止python对
变量的编码/解码,方法是在字符串定义中添加
r
,如下所示-

key = r"\x42\x1d\xd7"

这告诉python解释器读取字符串
raw
。试试看。

您的意思是说您希望传递
\x42\x1d\xd7
,而不将其转换为unicode

本例中的问题是因为在传递到
modul.func()
时,
\x42\x1d\xd7
被转换为“utf-8”

您可以通过执行以下操作来测试这一点:

key = "\x42\x1d\xd7"
key.encode('utf-8').decode('unicode-escape')
>> 'B\x1d\xc3\x97'
对于您的问题,您可以停止python对
变量的编码/解码,方法是在字符串定义中添加
r
,如下所示-

key = r"\x42\x1d\xd7"

这告诉python解释器读取字符串
raw
。试试看。

如果我使用raw,传入数组的大小是12,它带有斜杠和“x'-e”。我想得到大小为3的传入数组。{0x42,0x1d,0xd7}我也试图传递key.encode(),但python抱怨类型TypeError:在方法'Module_func',类型'char*'的参数2 Try-
key.encode('utf-8').decode()
,没有
raw
key.encode('unicode-escape')。decode(),没有raw的话会变成“B\\x1d\\xd7\\x92q”char*string这不起作用,生成更多不同的字节。我想要的是在python中创建一个string对象,并将该字符串传递给C,但该字符串必须有3个字节(0x42、0x1d、0xd7)。如果我使用raw,传入数组的大小是12,它带有斜杠和“x”-es。我想得到大小为3的传入数组。{0x42,0x1d,0xd7}我也试图传递key.encode(),但python抱怨类型TypeError:在方法'Module_func',类型'char*'的参数2 Try-
key.encode('utf-8').decode()
,没有
raw
key.encode('unicode-escape')。decode(),没有raw的话会变成“B\\x1d\\xd7\\x92q”char*string这不起作用,生成更多不同的字节。我想要的是在python中创建一个string对象,并将该字符串传递给C,但该字符串必须有3个字节(0x42、0x1d、0xd7)。如果我使用raw,传入数组的大小是12,它带有斜杠和“x”-es。我想得到大小为3的传入数组。{0x42,0x1d,0xd7}我也试图传递key.encode(),但python抱怨类型TypeError:在方法'Module_func',类型'char*'的参数2 Try-
key.encode('utf-8').decode()
,没有
raw
key.encode('unicode-escape')。decode(),没有raw的话会变成“B\\x1d\\xd7\\x92q”char*string这不起作用,生成更多不同的字节。我想要的是在python中创建一个string对象并将该字符串传递给C,但该字符串必须有3个字节(0x42、0x1d、0xd7)