字串 16 進位轉換

字串 16 進位轉換

如何將字串轉成16進位 ? 

‘ 將字串轉成 16 進位字串 
Private Function CvtString(ByVal strData As String) As String 
    Dim bytAry() As Byte ‘
宣告位元陣列 
    Dim strResult() As String ‘ 宣告字串陣列 
    Dim lngUB As Long 
    Dim lngLoop As Long

    ‘ 使用 StrConv 函數 , 並將引數設定成 vbFromUnicode , 
    ‘
把字串由 Unicode 轉成系統的預設字元碼對應頁。 
    ‘
並放進位元陣列裡 
    bytAry = StrConv(strData, vbFromUnicode)   
    lngUB = UBound(bytAry) ‘
使用 UBound 函數取得陣列最大上限 
    ‘
用 ReDim 陳述式來重新配置動態陣列變數的儲存空間。 
    ReDim strResult(lngUB) As String ‘ 將字串陣列重新定義成位元陣列的最大上限 
    ‘
使用 For Next 迴圈將每個位元陣列裡之各元素轉成16進位 
    For lngLoop = 0 To lngUB 
        strResult(lngLoop) = Hex(bytAry(lngLoop)) ‘
使用 HEX 函數將數字以十六進位 
    Next 
    ‘
使用Join 函數連結陣列中多個子字串並放至回傳字串裡 
    CvtString = Join(strResult, Chr(255))  ‘ 用 Chr(255) 來連結每個元素 
    ‘
使用 Erase 陳述式釋放動態的儲存空間 
    Erase bytAry 
    Erase strResult 

End Function

 ‘ 將16進位字串還原 
Private Function RvtString(ByVal strData As String) As String 
    Dim varAry As Variant
    Dim varElement As Variant 
    Dim bytAry() As Byte  ‘
宣告位元陣列 
    Dim lngLoop As Long

     ‘ 使用 Split 函數, 將字串以 Chr(255) 字元隔開成從零開始的一維陣列 
   varAry = Split(strData, Chr(255)) 

    ‘
用 ReDim 陳述式來重新配置動態陣列變數的儲存空間。 
    ReDim bytAry(UBound(varAry)) As Byte  ‘ 重新定義位元陣列的最大上限 

    ‘
使用 For Each 迴圈來將整個陣列元素由16位元轉回
    For Each varElement In varAry 
        bytAry(lngLoop) = Val("&H" & varElement) 
        lngLoop = lngLoop + 1 
    Next 

    ‘
使用 StrConv 函數 , 並將引數設定成 vbFromUnicode , 
    ‘
把位元陣列內容據系統的預設字元碼對應頁將字串轉成 Unicode。
    ‘
並放字串變數裡回傳 
    RvtString = StrConv(bytAry, vbUnicode)

     ‘ 使用 Erase 陳述式釋放動態的儲存空間 
   Erase bytAry

End Function 

Sample : 
    Dim strTest As String
    Dim strHexValue As String 
    strTest = "This is test !"
    strHexValue = CvtString(strTest) ‘
將字串轉 16 進位 
    MsgBox strHexValue, , "16進位值"
    MsgBox RvtString(strHexValue), , "
還原" ‘ 將字串由 16 進位傳回來