首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

汉字及字母、数字等混合字符与16进制互相转换解决方案

2012-02-11 
汉字及字母、数字等混合字符与16进制互相转换近期在制作一个字符- 16进制,16进制- 字符 的转换中遇到点问

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

热点排行