- ·上一篇文章:FBIDE的中文语言包(汉化)
- ·下一篇文章:PowerBasic发送RTU
PowerBasic实现的16进制字符串和Asc字符串的转换
做通信经常遇到字符串的转换,这种实现不是最快的,但是是空间和时间都比较理想
'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