字串 16 進位轉換
研究一下無線AP的密碼設定方式,剛好在網路上找到一段很有用的 function
資料來源: 強力鎯頭的VB部落
如何將字串轉成16進位 ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | '將字串轉成 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, C-hr(255)) '用 C-hr(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 函數, 將字串以 C-hr(255) 字元隔開成從零開始的一維陣列 varAry = Split(strData, C-hr(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 進位傳回來 |