2016-01-22 54 views
2

我需要在套接字上接收一個嵌套整數數組,例如,在c socket上接收整數數組的最佳方法

[[1,2,3],[4,5,6],...] 

子陣列總是3個值長,主陣列的長度varries,但事先已知。

搜索谷歌給了我很多選擇,從發送每個整數到只是將緩衝區轉換爲我認爲應該是的東西(似乎對我不安全),所以我正在尋找一種安全快速的方法去做這個。

回答

0

假設帶寬和數據大小不是非常重要,我會建議,將數組序列化爲字符串是一種安全且獨立於平臺/體系結構的方式來傳輸此類數組。這具有以下優點:

  • 不同大小的整數的通信主機
  • 沒有問題之間的二進制表示沒有問題具有不同的字節排列順序
  • 如果參數更改子陣列(長度更靈活,等)
  • 這是比較容易調試對比度的文本的協議爲二進制協議

的缺點是,有更多的字節具有在茶要發送nnel作爲一個很好的二進制編碼最小的必要條件。

如果您想要使用現成的庫來序列化/反序列化數組,您可以查看可用的許多JSON庫之一。 http://www.json.org/提供了幾個實現的列表。

1

的「子陣列」並不重要,你到底要去下傳輸3 ñ號和具有接收器將其解釋爲ñ排,每排3號。

對於任何外部表示,你將不得不選擇一個精度,即你應該爲每個整數使用多少位。 int類型沒有很好的規定,所以可能選擇32位,並將每個數字視爲int32_t

只要外部整數表示具有多個字節,就必須擔心這些字節的順序。傳統上使用網絡字節排序(「big endian」),但現在許多系統都觀察到大多數硬件是小端的,所以他們使用它。在這種情況下,您可以一次性將整個源數組寫入套接字(假設您使用的是TCP/IP套接字),可能是由行數或整數總數所支持。

0

序列化,你想要的方式,兩個主要的可能性:

  1. 編碼字符串,並修復分離器等
  2. 編碼與NBO,並將數據發送到固定的一些參數:第一長度你的整數,然後是數組的長度,然後是數據;一切正確編碼。

在C中,您可以使用XDR例程來正確編碼您的數據。

相關問題