【问题标题】:Convert string of byte array back to original string in vb.net将字节数组的字符串转换回vb.net中的原始字符串
【发布时间】:2015-02-05 01:27:04
【问题描述】:

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

这是我的做法:

    Dim b As Byte() = System.Text.Encoding.UTF8.GetBytes("Hello")
    Dim s As String = BitConverter.ToString(b).Replace("-", "")

然后我将 s 的值(即“48656C6C6F”)存储到数据库中。

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

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您可以使用您的十六进制字符串调用以下函数并将“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
    

    【讨论】:

    • 如果您打算走这条路,请考虑使用 ChrW 函数,以便支持 unicode。请注意,这些功能是 VB6 遗留下来的,最好使用 Encoding.UTF8.GetString,因为它与最初用于获取字节的操作“相反”。
    • @JamesThorpe:我同意并在我的回答中添加了替代代码。谢谢。
    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多