Python 如何从C中解码变量字符串?

Python 如何从C中解码变量字符串?,python,c,Python,C,正在尝试编程UDP连接。客户机是用python编写的,服务器是用C编写的 在python代码中,我将PDU定义为以下格式的结构(使用struct模块):'b5s50s'(unsigned char,char[5],char[50])。问题是,如果字符串没有被填充,剩下的就是垃圾,我应该删除它 从服务器解压缩响应后,如果我这样做: str = str_from_c.split('\0',1) 它返回给我这个: ['useful data', '\x00\x01\x00\x00\x00r\x00\

正在尝试编程UDP连接。客户机是用python编写的,服务器是用C编写的

在python代码中,我将PDU定义为以下格式的结构(使用struct模块):'b5s50s'
(unsigned char,char[5],char[50])
。问题是,如果字符串没有被填充,剩下的就是垃圾,我应该删除它

从服务器解压缩响应后,如果我这样做:

str = str_from_c.split('\0',1)
它返回给我这个:

['useful data', '\x00\x01\x00\x00\x00r\x00\x00\x00\xae\xf2d\xb7\x18\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x94\xecd\xb7\xa8\xe6\xb0\t\x00\x00\x00\x00\x00\xa9]\xb7\xca\xf1d\xb7']
我如何处理第二部分

你所说的鄙视是指处置?如果您只需要文本,那么只从结果中获取它-注意,我们在这里不调用变量
str
,因为这将隐藏内置的
str

text, rest = str_from_c.split('\0', 1)
然后只需使用
text
,如果您需要
rest
,您可以在以后使用它

请注意,在拆分一次的情况下,则首选
str.partition
,例如:

text, rest = str_from_c.partition('\0')[::2]
因为这确保了总是有一个3元组的结果,所以即使没有实际的拆分发生,解包也总是成功的

我怎么能轻视第二部分

只是不发送它

服务器代码可能如下所示:

char buffer[123];
<init buffer partially, terminating the the part with a 0 >

write(..., buffer, 123);

“我怎么能看不起第二部分?”只是不发送它?服务器有相同的结构。我明白了。那么我的拆分就可以了?@LiLou_u如果NUL上的拆分是在有用文本和消息的其余部分之间进行分隔的方式,那么它就可以了。。。忽略你不感兴趣的部分。。。我建议使用如上所示的
str.partition
,而不是
str.split
write(..., buffer, strlen(buffer) + 1);