字串 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 進位傳回來