简体   繁体   English

QTcpSocket:解码接收的数据

[英]QTcpSocket: decoding received data

I need to decode the data received from Universal Robot UR5 server. 我需要解码从Universal Robot UR5服务器收到的数据。 The data received is below. 收到的数据如下。 Can somebody please help me with decoding this message using Qt5 c++? 有人可以帮我解决使用Qt5 c ++解码此消息的问题吗?

\x00\x00\x04T@\xE2\xB2\xB8\xD4\xFD\xF3\xB6@\t\"\xD0\xE5`A\x8A\xBF\xF9\"\xD0\xE5`A\x88?\xF9\"\xD0\xE5`A\x89@\x12\xD9\x16\x87+\x02\f@\x12\xD9\x16\x87+\x02\f@\t\"\xD0\xE5`A\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xBB\xE0""f\xD1\x1B\xE1\x95\x8B\xBF\xF5\xB6\x18\xBE\xB0YA\xBF\xF5\xB8\x9E\xE6\xCB\xD9\xBC\xBF\xC4^\\\xFC^\x81i\xBE\xEE@\x01\xF2\xD7\b\x05\x00\x00\x00\x00\x00\x00\x00\x00\xBC\x19\xE2""B\x00\x00\x00\x00\xC0""1!\xAF\x86w&m\xC0""1#\xAD""b\x1C\xD9\xCE\xBF\xF7\xB5\xA6.\xF4Tz\xBF!\x9B\x1B\xF6\x80\xFFP\x00\x00\x00\x00\x00\x00\x00\x00@\t\"\xD0\xE0\x00\x00\x00\xBF\xF9\"\xD0\xD1\x10\xB4`?\xF9\"\xD0\xE0\x00\x00\x00@\x12\xD9\x16\x80\x00\x00\x00@\x12\xD9\x16\x80\x00\x00\x00@\t\"\xD0\xE0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xBB\xE0""f\xD1 \x00\x00\x00\xBF\xF5\xB6\x18\xC0\x00\x00\x00\xBF\xF5\xB8\x9E\xE0\x00\x00\x00\xBF\xC4^]\x00\x00\x00\x00\xBE\xEE@\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xBB\xE0""f\xD1 \x00\x00\x00\xBF\xF5\xB6\x18\xC0\x00\x00\x00\xBF\xF5\xB8\x9E\xE0\x00\x00\x00\xBF\xC4^]\x00\x00\x00\x00\xBE\xEE@\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xDF(\xD4\xDE\xE9Z\x10?\xBB\xF7\xD1N%*9?\xD0\xC2\xE6\xB9\x87\x1C\xE1@\x01\xC4\xB7+\x83\x8B\xD2@\x01\xC4\xB7\x14\xE4\x1D\xCA>\x93q]e!\xED\xD8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00>\xAE\x18\xA0\x85\x9A\xCB'>\x8B\r\xC1""E\x1F\x9C\x06>\xAC\xB0\xAA\xDB\xDFm,\xBEkF\xDE""b\x8D\xBCQ>\x95\xADv\x92\xF8(\xF5\xBD\xE3\xFC\x04\x11\xC6\xD3\x19?\xDF(\xD4\xA9\xCF\xAD\x8C?\xBB\xF7\xD2\x15\x90\xF0\xA6?\xD0\xC2\xE6\xCB\xBC]O@\x01\xC4\xB7""6\x1C\xF6\x04@\x01\xC4\xB7\x1F\x7F\xE0M>\x97\x96""3\x90\xB0*\xE2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@D\x00\x00\x00\x00\x00\x00@D\x00\x00\x00\x00\x00\x00@D\x00\x00\x00\x00\x00\x00@D\x00\x00\x00\x00\x00\x00@D\x00\x00\x00\x00\x00\x00@D\x00\x00\x00\x00\x00\x00?\xC1\xF0g\x05\xC8\x96\xDD@ \x00\x00\x00\x00\x00\x00@\x1C\x00\x00\x00\x00\x00\x00@o\xA0\x00\x00\x00\x00\x00@o\xA0\x00\x00\x00\x00\x00@o\xA0\x00\x00\x00\x00\x00@o\xA0\x00\x00\x00\x00\x00@o\xA0\x00\x00\x00\x00\x00@o\xA0\x00\x00\x00\x00\x00?\xF0\x00\x00\x00\x00\x00\x00@\x13\xB8\xAA\x9D\x1AX\xAE@\x14k\xD0*\xDC-\xAE@\x15\xAEW\xC1q\x0E\xBC@\f\xDBv7\x18'\xDA@\x0B\x03t\x19\x01\xE5{?\xF1\x05\x92*d

This works with the python code below. 这适用于下面的python代码。 But I need to do this in Qt5 c++. 但我需要在Qt5 c ++中这样做。

     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     s.settimeout(10)
     s.connect((HOST, PORT_30003))
     time.sleep(1.00)
     print ""
     packet_1 = s.recv(4)
     packet_2 = s.recv(8)
     packet_3 = s.recv(48)
     packet_4 = s.recv(48)
     packet_5 = s.recv(48)
     packet_6 = s.recv(48)
     packet_7 = s.recv(48)

     #reading current joint values from 48 bytes

     packet_18 = s.recv(8)
     packet_18 = packet_18.encode("hex") #convert the data from \x hex notation to plain hex
     q1 = str(packet_18)
     q1 = struct.unpack('!d', packet_18.decode('hex'))[0]
     print "q1 = ", q1 * 180/3.1416

     packet_19 = s.recv(8)
     packet_19 = packet_19.encode("hex") #convert the data from \x hex notation to plain hex
     q2 = str(packet_19)
     q2 = struct.unpack('!d', packet_19.decode('hex'))[0]
     print "q2 = ", q2 * 180/3.1416

     packet_20 = s.recv(8)
     packet_20 = packet_20.encode("hex") #convert the data from \x hex notation to plain hex
     q3 = str(packet_20)
     q3 = struct.unpack('!d', packet_20.decode('hex'))[0]
     print "q3 = ", q3 * 180/3.1416

     packet_21 = s.recv(8)
     packet_21 = packet_21.encode("hex") #convert the data from \x hex notation to plain hex
     q4 = str(packet_21)
     q4 = struct.unpack('!d', packet_21.decode('hex'))[0]
     print "q4 = ", q4 * 180/3.1416

     packet_22 = s.recv(8)
     packet_22 = packet_22.encode("hex") #convert the data from \x hex notation to plain hex
     q5 = str(packet_22)
     q5 = struct.unpack('!d', packet_22.decode('hex'))[0]
     print "q5 = ", q5 * 180/3.1416

     packet_23 = s.recv(8)
     packet_23 = packet_23.encode("hex") #convert the data from \x hex notation to plain hex
     q6 = str(packet_23)
     q6 = struct.unpack('!d', packet_23.decode('hex'))[0]
     print "q6 = ", q6 * 180/3.1416

I am able to decode the data myself with the code below: 我可以使用以下代码自行解码数据:

// joint values
double q1 = 0, q2=0, q3=0, q4=0, q5=0, q6=0;
// pose values
double x = 0, y=0, z=0, rX=0, rY=0, rZ=0;

QByteArray array;
array = p_socket->readAll();

// decoding length data
int length = 0;
memcpy(&length, array.constData(), 4);
length = qToBigEndian(length);
qDebug() << length;

int byteLength = 8;

// decoding joint 1 value
QByteArray jointArray1 = array.mid(252,byteLength).toHex();
long long currentJointPosition1=jointArray1.toLongLong(0,16);
q1 = reinterpret_cast<double&>(currentJointPosition1);

// decoding joint 2 value
QByteArray jointArray2 = array.mid(252+1*byteLength,byteLength).toHex();
long long currentJointPosition2=jointArray2.toLongLong(0,16);
q2 = reinterpret_cast<double&>(currentJointPosition2);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM