Я работаю над проектом с Raspberry Pi и Scratch. Мне нужно использовать протокол удаленных датчиков с C ++. Я пытался портировать код Python через, но я не могу получить C ++, чтобы вернуть нулевые значения.
Исходный код Python выглядит так:
import socket
from array import array
HOST = '192.168.1.101'
PORT = 42001
scratchSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
scratchSock.connect((HOST, PORT))
def sendCMD(cmd):
n = len(cmd)
a = array('c')
a.append(chr((n >> 24) & 0xFF))
a.append(chr((n >> 16) & 0xFF))
a.append(chr((n >> 8) & 0xFF))
a.append(chr(n & 0xFF))
scratchSock.send(a.tostring() + cmd)
sendCMD('sensor-update "dave" 201')
Моя попытка в C ++ выглядит так:
char* scratchencode(string cmd)
{
int cmdlength;
cmdlength = cmd.length();
char* combind = new char[20];
const char * sCmd = cmd.c_str();
char append[]={(cmdlength >> 24) & 0xFF, (cmdlength >> 16) & 0xFF, (cmdlength >> 8) & 0xFF, (cmdlength & 0xFF)};
strcpy(combind,append);
strcpy(combind,sCmd);
return combind;
}
Иглы, чтобы сказать, что это не работает, Может кто-нибудь помочь с переносом кода, я попытался имитировать код Python и orgial doument в http://wiki.scratch.mit.edu/wiki/Remote_Sensors_Protocol но не имели успеха.
Крис
Я решил проблему, спасибо Павел Ставарц. Ваш совет был именно тем, что мне было нужно, я преобразовал всю функцию для работы со строками, и она сработала в первый раз.
Код выглядит следующим образом:
string scratchencode(string cmd)
{
int cmdlength; // holds the length of cmd
string combind; // used to store the concatenated Packet
string mgsSize; // used to store Message size
cmdlength = cmd.length(); // length of CMD
//convert intiger to a 4 byte 32-bit big-Endian number, using bit shifting.
mgsSize = (cmdlength >> 24);
mgsSize += (cmdlength >> 16);
mgsSize += (cmdlength >> 8);
mgsSize += cmdlength;
combind = mgsSize + cmd; // concatenate mgsSize and cmd producing a structure of [size][size][size][size][string CMD (size bytes long)]
return combind; // return the string
}
Других решений пока нет …