做通信经常遇到字符串的转换,这种实现不是最快的,但是是空间和时间都比较理想
1 'Hex转Byte数组 2 Function Hex2Byte(ByVal sHex As String,ByRef bData() As Byte) As Long 3 Dim nIndex As Long,nBnd As Long 4 Dim pHex As Byte Ptr 5 Dim mAscData(127) As Byte At CodePtr(ASC_DATA) 6 7 nBnd=Len(sHex)\2-1 8 ReDim bData(nBnd) 9 pHex=StrPtr(sHex) 10 For nIndex=0 To nBnd 11 bData(nIndex)=mAscData(@pHex[nIndex * 2]) * 16 + mAscData(@pHex[nIndex * 2 + 1]) 12 Next nIndex 13 End Function 14 15 AsmData ASC_DATA 16 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 17 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 18 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 19 DB 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0 '48-63 20 DB 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0 '64-79 21 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 '80-95 22 DB 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0 '96-111 23 End AsmData 24 25 'Byte数组转Hex 26 Function Byte2Hex(ByRef bData() As Byte) As String 27 Dim sHex As String 28 Dim bHex() As Byte 29 Dim nIndex As Long,nBnd As Long,nSize As Long 30 Dim mHexData(15) As Byte At CodePtr(HEX_DATA) 31 32 nBnd=UBound(bData) 33 nSize=(nBnd+1)*2 34 ReDim bHex(nSize-1) 35 For nIndex=0 To nBnd 36 bHex(nIndex * 2) = mHexData(bData(nIndex) \ 16) 37 bHex(nIndex * 2 + 1) = mHexData(bData(nIndex) Mod 16) 38 Next nIndex 39 sHex=Peek$(VarPtr(bHex(0)),nSize) 40 Function=sHex 41 End Function 42 43 AsmData HEX_DATA 44 DB 48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70 '0-F 45 End AsmData