汉字及字母、数字等混合字符与16进制互相转换
近期在制作一个字符-> 16进制,16进制-> 字符 的转换中遇到点问题,请各位给帮个忙。
在字符转换16进制时没有什么问题,以下是字符-> 16进制的代码
Private Function StringToHex(ByVal MyString As String)
Dim StrAscii As String = " "
Dim ascii As Encoding = Encoding.ASCII
Dim tmpUnicode As Encoding = Encoding.Unicode
Dim unicodeBytes As Byte() = tmpUnicode.GetBytes(MyString)
Dim i As Integer
For i = 0 To UBound(unicodeBytes) - 1
StrAscii &= unicodeBytes(i)
Next
StringToHex1 = StrAscii
End Function
但是在16进制转换字符时遇到汉字和字母混合时转换出来的是乱码,在CSDN搜索了一下,找到一段jadeluo(秀峰)发的代码,可以转换汉字,但遇到半角字符时会转没了
如:16进制码:B2 E2 CA D4 D7 AA BB BB 61(应为:测试转换a),转换后就成了:测试转换,后面的那个a没了。
以下是jadeluo(秀峰)的这段代码:
Function HexToGB(ByVal sHex As String) As String
Dim sResult As String
Dim iLoop As Integer
sResult = " "
For iLoop = 1 To Len(sHex) \ 4
sResult = sResult + Chr(Val( "&H " + Mid(sHex, iLoop * 4 - 3, 4)))
Next iLoop
HexToGB = sResult
End Function
静请各位高人指点迷津!!!!
[解决办法]
Function HexToGB(ByVal sHex As String) As String
Dim sResult As String
Dim iLoop As Integer
sResult = ""
For iLoop = 1 To Len(sHex) Step 2
If Val("&H" & Mid$(sHex, iLoop, 4)) < 0 Then
sResult = sResult & Chr(Val("&H" & Mid$(sHex, iLoop, 4)))
iLoop = iLoop + 2
Else
sResult = sResult & Chr(Val("&H" & Mid(sHex, iLoop, 2)))
End If
Next iLoop
HexToGB = sResult
End Function
'结果如下:
' Debug.Print HexToGB("B2E261CAD4D7AABBBB")
测a试转换
' Debug.Print HexToGB("B2E2CAD4D7AABBBB61")
测试转换a
[解决办法]
[code=VB.NET][/code]
Private Function URLDecode(strValue As String) As String
Dim bytAry() As Byte
Dim Flag As Boolean
Dim varAry, varElement
Dim lngCnt As Long, lngLoop As Long
ReDim bytAry(1 To 999999) As Byte
strValue = Replace(strValue, "+", " ")
varAry = Split(strValue, "%")
Flag = varAry(0) = ""
lngCnt = 1
If UBound(varAry) > 0 Then
For Each varElement In varAry
If varElement <> Empty Then
If Len(varElement) >= 2 And Flag Then
bytAry(lngCnt) = Val("&H" & Left(varElement, 2))
lngCnt = lngCnt + 1
For lngLoop = 3 To Len(varElement)
bytAry(lngCnt) = Asc(Mid(varElement, lngLoop, 1))
lngCnt = lngCnt + 1
Next
Else
For lngLoop = 1 To Len(varElement)
bytAry(lngCnt) = Asc(Mid(varElement, lngLoop, 1))
lngCnt = lngCnt + 1
Next
Flag = True
End If
End If
Next
ReDim Preserve bytAry(1 To lngCnt - 1)
URLDecode = StrConv(bytAry, vbUnicode)
Erase bytAry
Else
URLDecode = Join(varAry)
End If
End Function
[解决办法]
Function HexToGB(ByVal sHex As String) As String
Dim b() As Byte, s() As String, i As Long
While InStr(sHex, " ") > 0
sHex = Replace(sHex, " ", " ")
Wend
s = Split(sHex)
ReDim b(UBound(s))
For i = 0 To UBound(s)
b(i) = Val("&H" & s(i))
Next
HexToGB = StrConv(b, vbUnicode)
End Function
Sub 转换()
MsgBox HexToGB("B2 E2 CA D4 D7 AA BB BB 61")
End Sub