指定されたコピー元のバイト配列から、指定されたコピー先バイト配列に、左詰でコピーを行う関数です。
関数としては、コピー元の配列数がコピー先の配列数より多い場合は、コピー先の配列数分までをコピーします。
また、コピー元の配列数がコピー先の配列数より少ない場合、コピー先の残りに指定のバイト値を埋めます。
左詰でバイト配列のコピーを行う
''' -----------------------------------------------------------------------------
'''
''' 左詰でバイト配列のコピーを行う。
'''
''' <param name="srcArr">コピー元バイト配列</param>
''' <param name="desArr">コピー先バイト配列</param>
''' <param name="fillByte">指定バイトデータ(規定値:0x00)</param>
''' コピー元のバイト数が、コピー先より小さい場合に、余った領域に埋めるバイトデータを埋める。
''' -----------------------------------------------------------------------------
Public Sub CopyByteArrLeft(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, desArr, copyBytes)
'コピー元のバイト数が、コピー先のバイト数より小さい場合、後ろに指定バイトデータ埋める
If copyBytes < desArr.Length Then
For idx = copyBytes To desArr.Length - 1
desArr(idx) = fillByte
Next
End If
End If
End Sub
'*****
'仮にテストプログラム
'*****
Private Sub CopyArrLeft_Click(sender As Object, e As EventArgs) Handles CopyArrLeft.Click
Try
'配列宣言
Dim byteArr(10) As Byte 'コピー元
Dim byteArr2(12) As Byte 'コピー先
'コピー元配列を「&H55」で埋める
FillByteArr(byteArr, &H55) '
'コピー元からコピー先へコピーする
CopyByteArrLeft(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
コメント