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

汉字及字母、数字等混合字符与16进制互相转换,该怎么解决

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

静请各位高人指点迷津!!!!

[解决办法]
沙发,帮你顶
[解决办法]
最后一个是Asicc字符,它好像是2位十六进制一读取,就读不到了。
[解决办法]
jadeluo(秀峰)发的代码 以4位为一个循环,多出不管,后面那个a只有2位来表示,当然会没有!
要是这个a放到中间,还会出现乱码的.

这段代码只适合纯中文的处理,你必须继续完善才行.
[解决办法]
-_-#,有一行代码的位置不是换一下的好

VB.NET code
Public Shared Function GetChsFromHex(ByVal hex As String) As String      hex = hex.Replace(" ", "")     If hex Is Nothing Then          Throw New ArgumentNullException("hex")      End If      If hex.Length Mod 2  < > 0 Then          Throw New ArgumentException("输入字符串无效!", "hex")      End If       Dim bytes As Byte() = New Byte(hex.Length / 2 - 1) {}      For i As Integer = 0 To bytes.Length - 1          Try              bytes(i) = Byte.Parse(hex.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber)          Catch              Throw New ArgumentException("输入字符串无效!", "hex")          End Try      Next      Dim chs As System.Text.Encoding = System.Text.Encoding.GetEncoding("gb2312")      Return chs.GetString(bytes)  End Function 

热点排行