2017-10-09 148 views
0

我是C#的新手,我構建了一個應用程序,它接收來自串行端口的字節並解析字節。將字節數組轉換爲C中的字符串#

在一種情況下,應用程序接收到表示字符串的字節數組。我的想法是將字節轉換爲字符串廣告將字符串可視化爲文本框。

有了這個代碼:

textSerialNumber.Text = Encoding.UTF8.GetString(readData.payload, 0, readData.payload.Length); 

我獲得字符串,但有一個問題:第一個字節的串行端口上接收是0×00(它表示一個ACK)。當我轉換有效載荷(ack +字符串)時,第一個字符是NULL,文本框分配失敗。

如果我修改代碼以開始形成字節數組的第一個元素:

textSerialNumber.Text = Encoding.UTF8.GetString(readData.payload, 1, readData.payload.Length); 

此外,在這種情況下,文本框分配失敗。

我嘗試跳過文本框中分配:

string x = Encoding.UTF8.GetString(readData.payload, 1, readData.payload.Length); 

但也詮釋這種情況下,編碼失敗。

任何建議找到錯誤?

在此先感謝。

+0

嘗試'string base64 = Convert.ToBase64String(readData);' – mmushtaq

+0

這是什麼意思「它失敗」? – JeffRSon

+0

失敗意味着賦值過程失敗,代碼達到catch語句。 – Federico

回答

2

嘗試string x = Encoding.UTF8.GetString(readData.payload, 1, readData.payload.Length - 1);

最後一個參數是count,所以如果從1開始,數必須是少1。

+0

謝謝帕維爾!有用!但是,文本框中的代理失敗:這是我的字符串:「V2_1928608331 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0」。 – Federico

+1

我發現了這個問題。 C#意味着另一個線程嘗試修改文本框。 – Federico

相關問題