忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

バイト配列を設定バイト値で埋める

指定されたバイト配列を、指定値で埋める関数です。バイト配列などは通常は使用しないのですが、制御関係などでは使用することもあり、 初期値として、バイト配列を設定する必要があります。
関数として以下に2種類の関数を例に示していますが、最初は単純に配列1個ずつに指定バイト値を設定しているだけです。 関数にするほどでもないのですが、この関数を元にしてInteger型の配列やDouble型の配列の初期化用の関数をオーバーライドすることができます。

2つ目の関数は、System.Linq の Enumerable を用いた方法を示します。 Enumerable.RepeatIEnumerable なオブジェクトを生成し、更にそれをArray化して、コピーを行っています。 (こちらの方が、見やすいかもしれません。)

バイト配列を設定バイト値で埋める

    ''' -----------------------------------------------------------------------------
    ''' 
    ''' バイト配列を設定値で埋める
    ''' 
    ''' <param name="desArr">対象バイト配列</param>
    ''' <param name="fillByte">バイト値</param>
    ''' 単純に配列を1個ずつ処理
    ''' -----------------------------------------------------------------------------
    Public Sub FillByteArr(ByVal desArr As Byte(), ByVal fillByte As Byte)
        If desArr.Length > 0 Then
            Dim idx As Integer
            For idx = 0 To desArr.Length - 1
                desArr(idx) = fillByte
            Next
        End If
    End Sub

    ''' -----------------------------------------------------------------------------
    ''' 
    ''' バイト配列を設定値で埋める・その2
    ''' 
    ''' <param name="desArr">対象バイト配列</param>
    ''' <param name="fillByte">バイト値</param>
    ''' System.Linq の Enumerable を用いた方法
    ''' -----------------------------------------------------------------------------
    Public Sub FillByteArr2(ByVal desArr As Byte(), ByVal fillByte As Byte)
        If desArr.Length > 0 Then
            Dim arr As IEnumerable(Of Byte) = Enumerable.Repeat(fillByte, desArr.Length)
            Array.Copy(arr.ToArray(), desArr, desArr.Length)
        End If
    End Sub

    '*****
    '仮にテストプログラム
    '*****
    Private Sub FillByte_Click(sender As Object, e As EventArgs) Handles FillByte.Click
        Try
            '配列宣言
            Dim byteArr(10) As Byte
            '配列を埋める
            FillByteArr2(byteArr, &H55)
            '結果の表示
            Dim str As String = ""
            For i = 0 To byteArr.Length - 1
                str &= String.Format("byteArr[{0}] = {1}", i, byteArr(i).ToString) & vbCrLf
            Next
            MsgBox(str)

        Catch ex As Exception
            'エラー
            MsgBox(ex.Message)
        End Try
    End Sub
PR

コメント

コメントを書く