MATLAB与Python3之间socket编程编码问题

在MATLAB与Python3进行socket通信时,遇到编码问题。MATLAB发送的数据在Python3中接收后,元素无法按预期索引。原因在于MATLAB编码后的数据被Python视为单一字符串,而非分隔的整数。解决方法是在Python端使用split(' ')函数对数据进行切片处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#python3   服务端

%MATLAB  客户端

python3发送数据:

DUOJIAO=[323,532]     

s=str(DUOJIAO)

connection.send(bytes(s, encoding = "utf8"))#发送数据  字节数组

MATLAB接受数据:

receive = fread(t,nBytes);%读取tcp服务器传来的数据
data=str2num(char(receive(2:end-1)')); %将ASCII码转换为str,再将str转换为数组 ()'不知是什么意思

data

data打印出来是[323,532],data[1]是323,这些没问题。


问题发生在MATLAB发送数据,python3接受数据!!

MATLAB发送数据:

ship_data=[5465 465];

fopen(t);
ship_data = num2str(ship_data);
class(ship_data)

fwrite(t,ship_data);%发送一段数据给tcp服务器。服务器好知道matlab的ip和端口

python3接受数据:

 buf = connection.recv(65536)#接收数据,并存入buf  40960表示接收数据大小   buf是bytes类
 print(buf)

 ship_data = buf.decode('utf8')



打印ship_data[0]居然是5,ship_data[1]是4,而不是我想要的ship_data[0]=5465。


这里只能强行解释一波了,matlab采用ansi编码,

python编码后,即bytes(s, encoding = "utf8")后,打印为 b'[323, 532]',里面的元素323和532是分开的整体,故可以按照索引正常取值。

matlab编码后,即ship_data = num2str(ship_data),python收到的数据打印为 b'5465   465',它把整个矩阵当成了一个字符串,因此取值智能一个字符一个字符取值。


综上,出现此类问题是由于编码风格不同。

python中是用' '将各部分分开,所有就要用到切片函数,ship_data = ship_data.split(" "),即可以解决问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值