VB.NET Tips - バイト配列を設定バイト値で埋める

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

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

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

01''' -----------------------------------------------------------------------------
02''' <summary>
03''' バイト配列を設定値で埋める
04''' </summary>
05''' <param name="desArr">対象バイト配列
06''' <param name="fillByte">バイト値
07''' <remarks>単純に配列を1個ずつ処理</remarks>
08''' -----------------------------------------------------------------------------
09Public Sub FillByteArr(ByVal desArr As Byte(), ByVal fillByte As Byte)
10    If desArr.Length > 0 Then
11        Dim idx As Integer
12        For idx = 0 To desArr.Length - 1
13            desArr(idx) = fillByte
14        Next
15    End If
16End Sub
17 
18''' -----------------------------------------------------------------------------
19''' <summary>
20''' バイト配列を設定値で埋める・その2
21''' </summary>
22''' <param name="desArr">対象バイト配列
23''' <param name="fillByte">バイト値
24''' <remarks>System.Linq の Enumerable を用いた方法</remarks>
25''' -----------------------------------------------------------------------------
26Public Sub FillByteArr2(ByVal desArr As Byte(), ByVal fillByte As Byte)
27    If desArr.Length > 0 Then
28        Dim arr As IEnumerable(Of Byte) = Enumerable.Repeat(fillByte, desArr.Length)
29        Array.Copy(arr.ToArray(), desArr, desArr.Length)
30    End If
31End Sub
32 
33'*****
34'仮にテストプログラム
35'*****
36Private Sub FillByte_Click(sender As Object, e As EventArgs) Handles FillByte.Click
37    Try
38        '配列宣言
39        Dim byteArr(10) As Byte
40        '配列を埋める
41        FillByteArr2(byteArr, &H55)
42        '結果の表示
43        Dim str As String = ""
44        For i = 0 To byteArr.Length - 1
45            str &= String.Format("byteArr[{0}] = {1}", i, byteArr(i).ToString) & vbCrLf
46        Next
47        MsgBox(str)
48 
49    Catch ex As Exception
50        'エラー
51        MsgBox(ex.Message)
52    End Try
53End Sub

総アクセス数