簡體   English   中英

將char數組從C ++(客戶端)傳遞給python(服務器)Winsock

[英]Passing char array from c++ (client) to python(server) winsock

我試圖將char數組形式的c ++(client)傳遞給python(服務器)。 我已經使用winsock制作了一個接口,並通過hello world string測試了它,並且可以正常工作。 但是實際上,我需要將浮點數從c ++傳遞給python。 (3個浮點讓我們說x,y,z)。 這些浮點數會不斷更新,因此我正在談論的代碼在while循環中並永遠運行。 在c ++中,我正在處理從IMU傳感器捕獲的實時數據,這些數據需要在Python中進一步處理。 我試圖將浮點值轉換為char數組:

char zarray[20];
sprintf(zarray, "%f", z_angle);// z_angle the float I need to pass
char *c[]={zarray};

然后將其發送到python:

iResult=send(sock,*c, (int)strlen(*c),0);

我在python中獲得的輸出如下所示:0.1152720.1152720.115272

我不知道為什么會這樣,這是什么樣的格式。 我嘗試在以下情況后清空char * c:

iResult=send(sock,*c, (int)strlen(*c),0);
*c[0] = 0;

但這沒有幫助。 有人知道為什么會這樣嗎? 或者還有其他方法可以使用winsock將浮點數從c ++傳遞到python嗎?

謝謝

您說要通過TCP連接在循環中發送表示浮點數的字符。 TCP連接是STREAM。 這意味着您在一個接收中可能會收到多個發送的數據包,或者一次發送可能需要多個接收。

必須使用更高級別的協議來明確聲明已發送字節的含義並對其進行定界。 您至少可以做的是將您的浮點數用空格分隔(或者換行符更好):

sprintf(zarray, "%f\n", z_angle);

這樣,不同的浮點數將在Python的不同行上出現。

無論如何,這里使用指針數組的方式似乎過於復雜。 只需使用:

iResult=send(sock,zarray, (int)strlen(zarray),0);

您想在Python端使用值做什么? 將其用作浮點類型是否重要,還是僅在使用浮點值之后? 將float值解析為字符串並將其發送意味着,如果您想將float用作float變量,則需要將其從string解析為在python端的float。

c ++和python應用程序是否都在同一平台上運行?

通過網絡發送浮動消息時,您需要考慮字節序,因為不同的平台可能會以不同的方式處理浮動消息。

另外,為什么將zarray復制到c變量? 您可以簡單地將zarray變量傳遞給send函數:

iResult=send(sock,zarray, (int)strlen(zarray),0);

您可能還想看看此鏈接->

從服務器向客戶端發送浮點數

而不是傳遞數組,您應該傳遞JSON文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM