指定されたコピー元のバイト配列から、指定されたコピー先バイト配列に、右詰でコピーを行う関数です。
関数としては、コピー元の配列数がコピー先の配列数より多い場合は、コピー先のコピー開始位置を右にずらして配列数分までをコピーします。
また、コピー元の配列数がコピー先の配列数より少ない場合、コピー先の残りに指定のバイト値を埋めます。
右詰でバイト配列のコピーを行う
''' -----------------------------------------------------------------------------
'''
''' 右詰でバイト配列のコピーを行う。
'''
''' <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
コメント