读书人

汉字及字母、数字等混合字符与16进制互

发布时间: 2012-02-11 09:51:35 作者: rapoo

汉字及字母、数字等混合字符与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

读书人网 >VB

热点推荐