2015-11-17 38 views
0

我想通過字符數組窗體c + +(客戶端)到python(服務器)。我使用winsock創建了一個接口,我使用hello world字符串測試了它,它工作正常。但實際上我需要從C++端傳遞給Python。 (3個花車可以說,x,y,z)。 這些浮點數不斷更新,所以我說的代碼是在while循環中運行的。在C++中,我正在處理從IMU傳感器捕獲的實時數據,這些需要在Python中進一步處理。 我試圖浮點值轉換成字符數組:從c + +(客戶端)傳遞字符數組到python(服務器)winsock

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?

謝謝

回答

1

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

必須使用更高級別的協議來清楚地聲明發送的字節是什麼意思並劃定它們。你可以做最不重要的是你的彩車用空格(甚至更好用換行)分隔:

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

這樣一來,不同的花車會在不同的行Python端。

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

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

我只是想增加一個空間,但是這個效果太 – SurDin

+0

謝謝。它使用sprintf(zarray,「%f \ n」,z_angle); – userMilka

+0

謝謝。它使用sprintf(zarray,「%f \ n」,z_angle)..但我需要發送x_angle,y_angle。我試圖將這些角度轉換爲字符串連接它們與「!」(所以我可以拆分python一側的字符串),然後將它們轉換爲字符。 x_angle,y_angle,z_angle同時更新,我需要將它們一起發送。這是我在Python中得到的:'它不起作用。有沒有什麼聰明的方法可以使用TCP將3個浮點數傳遞給服務器。 – userMilka

0

你想在Python方面做什麼?將它作爲浮點類型使用很重要嗎?或者您只是在浮點數之後使用它? 將float值解析爲字符串併發送它意味着如果要將float用作float變量,則需要從字符串解析該值以浮點在python端。

C++和python應用程序都在同一個平臺上運行嗎?

當通過網絡發送浮動數據時,您需要考慮排序,因爲不同的平臺可能會以不同的方式處理浮動。

另外,爲什麼複製zarray到c變量?您可以在z陣列變量簡單地傳遞給發送功能:

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

你可能想看看這個鏈接,以及 - >

Sending floating point number from server to client

+0

OP不會發送二進制浮點數,而是發送字符串編碼的浮點數。字節順序在這裏不是問題。 –

+0

當然,但OP確實詢問了通過網絡發送浮動的其他方式「或者是否有任何其他方式可以使用winsock將C++中的浮動數據傳遞給python?」 – pieterlouw

0

而是傳球達陣,你應該通過JSON文件

相關問題