忍者ブログ

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

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

右詰でバイト配列のコピーを行う

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

右詰でバイト配列のコピーを行う

    ''' -----------------------------------------------------------------------------
    ''' 
    ''' 右詰でバイト配列のコピーを行う。
    ''' 
    ''' <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
PR

コメント

コメントを書く