2013-10-31 73 views
-2

我想在通過UDP發送之前將二進制字符串拼湊在一起。這將在非常小的Linux計算機上以C運行。我希望在C中有一些方法可以做到這一點,類似於我如何使用BinaryWriter在C#中執行此操作。我希望能夠將一個int作爲4個字節推送到char數組的末尾,將所有另一個字符串推到末尾,或者將一個短字符推送到2個字節等。有沒有像C中的BinaryWriter?

我不知道C很好,任何時候我谷歌的東西,C + +總是會出現,但我不能得到vector或stringstream(sstream?)來編譯。它只是說他們沒有聲明。

我如何編譯:

gcc -o test test.c 

我需要有一個char*全部建成之前,我把它傳遞給sendto在那裏我送過UDP端口。

+1

C!= C++,所以C++程序不會用C編譯器編譯。 –

+0

['malloc(3)'](http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong),['realloc(3)'](http:// pubs。 opengroup.org/onlinepubs/009604499/functions/realloc.html),['free(3)'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/free.html),['memcpy(3 )'](http://pubs.opengroup.org/onlinepubs/009695399/functions/memcpy.html) – 2013-10-31 20:13:41

+0

什麼是C編譯器呢? –

回答

0

您可以創建一個緩衝區,然後在您填充數組時填充它。如果要放入一個int,則可以投射指針或使用memcpy(),然後在寫入後,將walker(指針)遞增寫的東西的大小。然後困難在於將其作爲正確的尺寸讀出來,但如果您的訂單被某些協議禁止(也許您決定),那麼您可以恢復它。例如:

void* buffer = malloc(1500); 
void* walker = buffer; 
uint32_t myVal = htonl(31415); 
memcpy(walker, &myVal, sizeof(myVal); 
walker += sizeof(myVal); 

另外請注意,您將需要確保對此類情況的發送者和接收者都共享一個端方案(包括大端或小尾數[或轉換])。這可以通過使用諸如ntohs()htons()之類的功能來幫助,所述功能在主機特定格式和淨中立版本之間轉換數字。

+0

'*(int *)walker'違反了嚴格的別名規則,因此它調用未定義的行爲。 – 2013-10-31 20:17:55

相關問題