读书人

字符串和十六进制的转换解决办法

发布时间: 2012-01-13 22:43:29 作者: rapoo

字符串和十六进制的转换
有一文本框TextBox1,我写了如下的字符串和十六进制的转换函数。
但是发现如下问题?!
Private Function HexDisplayByString(ByVal sString As String) As String
Dim bText() As Byte = Encoding.ASCII.GetBytes(sString)
Dim sTemp As String = " "
For i As Integer = 0 To bText.Length - 1
sTemp += String.Format( "{0:X2} ", bText(i))
Next
Return sTemp
End Function

Private Function StringDisplayByHex(ByVal sHex As String) As String
Dim bText As Byte()
Dim sTemp As String = " "
Dim sItems() As String = (Trim(sHex)).Split( " "c)

If sItems.Length > 0 Then
ReDim bText(0 To sItems.Length - 1)
For i As Integer = 0 To sItems.Length - 1
If sItems(i) <> " " Then
bText(i) = "&H " & sItems(i)
sTemp += Chr(bText(i))
'sTemp += Convert.ToChar(Convert.ToInt32(bText(i), 16))
End If
Next
End If
Return sTemp
End Function

当我在TextBox1中输入 "abcd ",
然后执行TextBox1.Text = HexDisplayByString(TextBox1.Text)
再执行TextBox1.Text = StringDisplayByHex(TextBox1.Text)
就可以还原了。

可是当我在TextBox1中输入 "AA BB CC DD ",
然后执行TextBox1.Text = StringDisplayByHex(TextBox1.Text)
再执行TextBox1.Text = HexDisplayByString(TextBox1.Text)
居然数据没了,无法还原为 "AA BB CC DD "。



就算是看到乱码,也应该能够还原啊!?
帮忙给看看,给给解决方法?

[解决办法]
别用ASCII编码,用GB2312编码或者是系统默认编码

Private Function HexDisplayByString(ByVal sString As String) As String
Dim bText() As Byte = Encoding.Default.GetBytes(sString)
Dim sTemp As String = " "
For i As Integer = 0 To bText.Length - 1
sTemp += String.Format( "{0:X2} ", bText(i))
Next
Return sTemp
End Function

Private Function StringDisplayByHex(ByVal sHex As String) As String
Dim bText As Byte()
Dim sTemp As String = String.Empty
Dim sItems() As String = (Trim(sHex)).Split( " ")

If sItems.Length > 0 Then
ReDim bText(0 To sItems.Length)
For i As Integer = 0 To sItems.Length - 1
If sItems(i) <> " " Then
bText(i) = "&H " & sItems(i)
End If
Next
sTemp = Encoding.Default.GetString(bText)
End If
Return sTemp
End Function

读书人网 >VB Dotnet

热点推荐