2017-10-09 30 views
0

私はC#が初めてで、シリアルポートからバイトを受け取り、バイトを解析するアプリケーションを構築しました。バイト配列をC#の文字列に変換する

1つのシナリオでは、アプリケーションは文字列を表すバイトの配列を受け取ります。私の考えは、バイトを文字列に変換することです。広告は文字列をテキストボックスに視覚化します。私は、文字列を取得するが、問題がある

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

:このコードで

最初のバイトのシリアルポートで受信が(それがACKを表す)は0x00です。ペイロード(ack +文字列)を変換すると、最初の文字はNULLになり、テキストボックスの割り当ては失敗します。

私はバイト配列の最初の要素を形成開始するためにコードを変更する場合:この場合も

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

をテキストボックスの割り当てが失敗しました。

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

をしかし、また、エンコードが失敗したこのケースをint型:

私は、テキストボックスの割り当てをスキップしてみてください。

エラーを見つけようとするメッセージがありますか?

ありがとうございます。

+0

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

+0

「失敗する」とはどういう意味ですか? – JeffRSon

+0

Failsは、代入プロシージャが失敗し、コードがcatchステートメントに達することを意味します。 – Federico

答えて

2

最終引数がcountあるので、あなたは1から開始した場合、カウントは1以下である必要がありstring x = Encoding.UTF8.GetString(readData.payload, 1, readData.payload.Length - 1);

を試してみてください。

+0

ありがとうPavel!できます!しかし、テキストボックスへの割り当ては失敗します:これは私の文字列 "V2_1928608331 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0"です。 – Federico

+1

問題が見つかりました。 C#は、別のスレッドがテキストボックスを変更しようとしていることを意味します。 – Federico

関連する問題