当前位置:K88软件开发文章中心编程全书编程全书03 → 文章内容

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

减小字体 增大字体 作者:本站  来源:本站整理  发布时间:2019-1-6 13:01:21

做通信经常遇到字符串的转换,这种实现不是最快的,但是是空间和时间都比较理想
'Hex转Byte数组
Function Hex2Byte(ByVal sHex As String,ByRef bData() As Byte) As Long
Dim nIndex As Long,nBnd As Long
Dim pHex As Byte Ptr
Dim mAscData(127) As Byte At CodePtr(ASC_DATA)

nBnd=Len(sHex)\2-1
ReDim bData(nBnd)
pHex=StrPtr(sHex)
For nIndex=0 To nBnd
bData(nIndex)=mAscData(@pHex[nIndex * 2]) * 16 + mAscData(@pHex[nIndex * 2 + 1])
Next nIndex
End Function

AsmData ASC_DATA
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0 '48-63
DB 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0 '64-79
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 '80-95
DB 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0 '96-111
End AsmData

'Byte数组转Hex
Function Byte2Hex(ByRef bData() As Byte) As String
Dim sHex As String
Dim bHex() As Byte
Dim nIndex As Long,nBnd As Long,nSize As Long
Dim mHexData(15) As Byte At CodePtr(HEX_DATA)

nBnd=UBound(bData)
nSize=(nBnd+1)*2
ReDim bHex(nSize-1)
For nIndex=0 To nBnd
bHex(nIndex * 2) = mHexData(bData(nIndex) \ 16)
bHex(nIndex * 2 + 1) = mHexData(bData(nIndex) Mod 16)
Next nIndex
sHex=Peek$(VarPtr(bHex(0)),nSize)
Function=sHex
End Function

AsmData HEX_DATA
DB 48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70 '0-F
End AsmData