文字列の一部をバイト単位で取り出す

http://jeanne.wankuma.com/tips/string/leftb.html より。
※LeftB()において、取り出す文字数が、指定文字列の長さより大きいとき例外を送出するので、少し変更しました。

Option Strict On

''' -----------------------------------------------------------------------------
''' <summary>
'''     Microsoft.VisualBasic.Strings をカバーした静的クラスです。
''' <summary>
''' -----------------------------------------------------------------------------

Public Class VBStrings

#Region " LeftB メソッド "

    ''' -----------------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の左端から指定したバイト数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。<param>
    ''' <param name="iByteSize">
    '''     取り出すバイト数。</param>
    ''' <returns>
    '''     左端から指定されたバイト数分の文字列。</returns>
    ''' -----------------------------------------------------------------------------------------
    Public Shared Function LeftB(ByVal stTarget As String, ByVal iByteSize As Integer) As String
        Return MidB(stTarget, 1, iByteSize)
    End Function

#End Region

#Region " MidB メソッド (+1) "

    ''' -----------------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の指定されたバイト位置以降のすべての文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iStart">
    '''     取り出しを開始する位置。</param>
    ''' <returns>
    '''     指定されたバイト位置以降のすべての文字列。</returns>
    ''' -----------------------------------------------------------------------------------------
    Public Shared Function MidB(ByVal stTarget As String, ByVal iStart As Integer) As String
        Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
        Dim bBytes As Byte() = hEncoding.GetBytes(stTarget)

        Return hEncoding.GetString(bBytes, iStart - 1, bBytes.Length - iStart + 1)
    End Function


    ''' -----------------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の指定されたバイト位置から、指定されたバイト数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iStart">
    '''     取り出しを開始する位置。</param>
    ''' <param name="iByteSize">
    '''     取り出すバイト数。</param>
    ''' <returns>
    '''     指定されたバイト位置から指定されたバイト数分の文字列。</returns>
    ''' -----------------------------------------------------------------------------------------
    Public Shared Function MidB _
    (ByVal stTarget As String, ByVal iStart As Integer, ByVal iByteSize As Integer) As String
        Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
        Dim bBytes As Byte() = hEncoding.GetBytes(stTarget)

        If iByteSize > bBytes.Length - iStart + 1 Then
            iByteSize = bBytes.Length - iStart + 1
        End If
        Return hEncoding.GetString(bBytes, iStart - 1, iByteSize)
    End Function

#End Region

#Region " RightB メソッド "

    ''' -----------------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の右端から指定されたバイト数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iByteSize">
    '''     取り出すバイト数。</param>
    ''' <returns>
    '''     右端から指定されたバイト数分の文字列。</returns>
    ''' -----------------------------------------------------------------------------------------
    Public Shared Function RightB(ByVal stTarget As String, ByVal iByteSize As Integer) As String
        Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
        Dim bBytes As Byte() = hEncoding.GetBytes(stTarget)

        Return hEncoding.GetString(bBytes, bBytes.Length - iByteSize, iByteSize)
    End Function

#End Region

End Class