通过socket在C ++和python之间交换固定的浮点数组

时间:2017-03-05 15:18:53

标签: python c++ sockets

我正在尝试使用C ++发送固定长度的float数组 并使用python来获取它

这是我的C ++客户端,其中sConnect是SOCKET对象

    float news[2];
    news[0] = 1.2;
    news[1] = 2.56;
    char const * p = reinterpret_cast<char const *>(news);
    std::string s(p, p + sizeof news);
    send(sConnect, &s[0], sizeof(news), 0);

在python服务器上 我的代码就像

import socketserver


class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):

    self.data = self.request.recv(8).strip()
    print (self.data)

if __name__ == "__main__":
   HOST, PORT = "127.0.0.1", 9999
   print("listening")
   server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
   server.serve_forever()

我在python上获得的数据就像

  

B '\ x9a \ X99 \ X99吗?\ n \ XD7#@'

如何将此恢复回我发送的原始浮动数据? 或者有更好的方式来发送和接收数据吗?

1 个答案:

答案 0 :(得分:1)

您可以使用struct模块解压缩字节数据。

import struct
news = struct.unpack('ff', b'\x9a\x99\x99?\n\xd7#@')
print(news)

使用您的代码:

import struct
import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(8).strip()
        news = struct.unpack('ff', self.data)
        print(news)

struct.unpack的第一个参数'ff'是指定数据的预期布局的格式字符串,在本例中为2个浮点数。有关其他格式字符,请参阅https://docs.python.org/3/library/struct.html