在vb.net中将字节数组的字符串转换回原始字符串

在vb.net中将字节数组的字符串转换回原始字符串,vb.net,Vb.net,我有一个纯文本字符串,我正在将其转换为字节数组,然后转换为字符串并存储在数据库中 我是这样做的: Dim b As Byte() = System.Text.Encoding.UTF8.GetBytes("Hello") Dim s As String = BitConverter.ToString(b).Replace("-", "") 之后,我将s的值(即“48656C6F”)存储到数据库中 稍后,我想从数据库中检索这个值,并将其转换回“Hello”。我该怎么做呢?您可以使

我有一个纯文本字符串,我正在将其转换为字节数组,然后转换为字符串并存储在数据库中

我是这样做的:

    Dim b As Byte() = System.Text.Encoding.UTF8.GetBytes("Hello")
    Dim s As String = BitConverter.ToString(b).Replace("-", "")
之后,我将s的值(即“48656C6F”)存储到数据库中


稍后,我想从数据库中检索这个值,并将其转换回“Hello”。我该怎么做呢?

您可以使用十六进制字符串调用以下函数,并返回“Hello”。请注意,该函数不验证输入,除非可以确保输入有效,否则需要添加验证

Private Function HexToString(ByVal hex As String) As String
    Dim result As String = ""
    For i As integer = 0 To hex.Length - 1 Step 2
        Dim num As Integer = Convert.ToInt32(hex.Substring(i, 2), 16)
        result &= Chr(num)
    Next
    Return result
End Function
James Thorpe在他的评论中指出,使用Encoding.UTF8.GetString转换回字符串更合适,因为这与最初创建十六进制字符串的方法相反。我同意,但由于我的原始答案已经被接受,我犹豫是否要更改它,所以我添加了一个替代版本。关于跳过输入验证的说明仍然适用

Private Function HexToString(ByVal hex As String) As String
    Dim bytes(hex.Length \ 2 - 1) As Byte 
    For i As Integer = 0 To hex.Length - 1 Step 2
        bytes(i \ 2) = Byte.Parse(hex.Substring(i, 2), System.Globalization.NumberStyles.HexNumber)
    Next
    Return System.Text.Encoding.UTF8.GetString(bytes)
End Function

如果你要走那个路线,你可以考虑使用这个函数,这样你就可以支持Unicode了。请注意,这些函数是VB6的遗留问题,最好使用它,因为它与最初用于获取字节的操作“相反”。@JamesThorpe:我同意,并在我的回答中添加了替代代码。非常感谢。