指定されたコピー元のバイト配列から、指定されたコピー先バイト配列に、右詰でコピーを行う関数です。
関数としては、コピー元の配列数がコピー先の配列数より多い場合は、コピー先のコピー開始位置を右にずらして配列数分までをコピーします。
また、コピー元の配列数がコピー先の配列数より少ない場合、コピー先の残りに指定のバイト値を埋めます。
右詰でバイト配列のコピーを行う
''' ----------------------------------------------------------------------------- '''''' 右詰でバイト配列のコピーを行う。 ''' ''' <param name="srcArr">コピー元バイト配列</param> ''' <param name="desArr">コピー先バイト配列</param> ''' <param name="fillByte">指定バイトデータ(規定値:0x00)</param> '''コピー元のバイト数が、コピー先より小さい場合に、先頭から余った領域にバイトデータを埋める。 ''' ----------------------------------------------------------------------------- Public Sub CopyByteArrRight(ByVal srcArr As Byte(), ByVal desArr As Byte(), Optional ByVal fillByte As Byte = &H0) Dim idx As Integer If srcArr.Length = 0 Then '元の配列長が0の場合、指定バイトデータを埋める For idx = 0 To desArr.Length - 1 desArr(idx) = fillByte Next Else 'コピー先に収まるバイト数を計算 Dim copyBytes As Integer = srcArr.Length 'コピー元の長さ If srcArr.Length > desArr.Length Then 'コピー元の長さがコピー先の長さより大きい場合、コピー先の長さをコピー数にする copyBytes = desArr.Length End If 'コピー元の長さで、コピー先の開始位置を右にずらして、左からコピー Array.Copy(srcArr, 0, desArr, desArr.Length - copyBytes, copyBytes) 'コピー元のバイト数が、コピー先のバイト数より小さい場合、指定バイトデータを埋める If copyBytes < desArr.Length Then For idx = 0 To (desArr.Length - copyBytes) - 1 desArr(idx) = fillByte Next End If End If End Sub '***** '仮にテストプログラム '***** Private Sub CopyArrRight_Click(sender As Object, e As EventArgs) Handles CopyArrRight.Click Try '配列宣言 Dim byteArr(10) As Byte 'コピー元 Dim byteArr2(12) As Byte 'コピー先 'コピー元配列を「&H55」で埋める FillByteArr(byteArr, &H55) ' 'コピー元からコピー先へコピーする CopyByteArrRight(byteArr, byteArr2, &HAA) '結果の表示 Dim str As String = "" For i = 0 To byteArr2.Length - 1 str &= String.Format("byteArr2[{0}] = {1}", i, byteArr2(i).ToString("X")) & vbCrLf Next MsgBox(str) Catch ex As Exception 'エラー MsgBox(ex.Message) End Try End Sub
関連する記事
⇒配列の使い方について(Dim, Redim)⇒配列の使い方の注意点について(コピー, Clone)
⇒配列の範囲指定によるコピー(Array.Copy, Skip, Take)
PR
コメント