2012-11-12 30 views
0

我正在用.NET套接字爲客戶端/服務器程序(它是我正在使用的系統的一個模型),以方便使用。一切都在順利進行,數據全部被髮送; char數組一直是最大的問題。緩衝和封送字符數組通過套接字,打印System.Char []

我發送的數據包本質上是一堆雙胞胎和一個結構內的char數組(這是必要/必要的,因爲它模擬了我模擬的系統上的數據包)。所有的雙打工作都很好,但是char數組有點棘手,因爲數組需要是4個字節/字符長。

我已經使用編組庫來處理的字節數據以及4的字符數組緩衝區大小像這樣:

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public char[] tmp; 

我也使用:[StructLayout(LayoutKind.Sequential,字符集= CharSet.Ansi)]以確保我的字符是1個字節。最終會讀取我的客戶端程序的服務器以C語言編寫,我希望確保類型正好與此類似。

無論如何,我目前使用的服務器程序測試的東西收到數據包和一切正常,但是當我嘗試打印它出於調試的目的字符數組並沒有完全按照計劃。

我有一個大的字符串,我把所有的東西變成像這樣:

return_str += "\nChar Array (tmp) : " + str.tmp; 

然後我用後來函數調用打印。

打印什麼是以下:

System.Char[] . 

代替我所指定的字符數組被(IE,ABCD或類似的東西)。

我指定我的數據包值的方式是帶有滑塊和文本框等窗口應用程序。就像我說的,雙打都完美地傳達了它們的值,但這是另一個問題。

我不確定這是一個編組代碼的問題,還是我缺少char數組。

真的可以使用一些幫助

回答

3

char[]調用ToString()將打印,你看到了什麼。

您需要使用new string(str.tmp)char[]轉換爲字符串。

如果您正在讀取字符串,請考慮使用byte[]代替,然後使用System.Encoding.Text來讀取字符串(存在用於ASCII和各種UTF變體的編碼器)。

+0

感謝您的迴應,修復它!我有點卡住了char [],因爲它是我試圖建模的系統中使用的類型。但我將來會記住這一點,謝謝你的提示。 – Wuzseen