PowerBasic实现的16进制字符串和Asc字符串的转换

做通信经常遇到字符串的转换,这种实现不是最快的,但是是空间和时间都比较理想
 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

 

posted @ 2016-03-06 17:55  稻草人Seven  阅读(336)  评论(0编辑  收藏  举报