投稿者 vb素人  (社会人) 投稿日時 2017/7/6 17:32:18
魔界の仮面弁士さま

受信データ(03FF)を10進数の数値(1023)に変換する方法について。

↓のコードでテストしていますが、
Dim a As Short = BitConverter.ToInt16(data, 0)   '符号付き 2 バイト整数に変換 
この行で、次のメッセージが出てしまいます。

**ターゲット配列は、コレクションの項目すべてをコピーするには長さが不足しています。配列のインデックスと長さを確認してください。**


data配列の扱いに問題があるのでしょうか。



    Private Delegate Sub Delegate_RcvDataToTextBox(data As Byte())

    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

        If SerialPort1.IsOpen = False Then
            Return
        End If

        Try
            Dim data(SerialPort1.BytesToRead - 1) As Byte
            SerialPort1.Read(data, 0, data.Length)

            Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), data)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try





    End Sub

    Private Sub RcvDataToTextBox(data As Byte())

        '受信データをテキストボックスの最後に追記する.
        If IsNothing(data) = False Then
            'RcvTextBox.AppendText(CStr(data))

            Dim a As Short = BitConverter.ToInt16(data, 0)   '符号付き 2 バイト整数に変換 
            Dim b As String = Convert.ToString(a, 10)  '10進数表記の "1023" に変換 
            RcvTextBox.AppendText(b)
 
        End If

    End Sub