2015-02-04 3 views
0

У меня есть простая текстовая строка, которую я конвертирую в массив байтов, а затем в строку и хранящуюся в базе данных.Преобразование строки байтового массива обратно в исходную строку в vb.net

Вот как я это делаю:

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

Затем я сохраняю значение с (что «48656C6C6F») в базу данных.

Позже я хочу получить это значение из базы данных и преобразовать его в «Привет». Как мне это сделать?

ответ

2

Вы можете вызвать следующую функцию с помощью шестнадцатеричной строки и вернуть «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 

Джеймс Торп отмечает в своем комментарии, что было бы более целесообразно использовать 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 
+1

Рассмотрим с помощью функции [ 'ChrW'] (https://msdn.microsoft.com/en-us/library/613dxh46%28v=vs.90%29.aspx), если вы собираетесь пройдите по этому маршруту, чтобы поддерживать Unicode. Имейте в виду, что эти функции - похмелье от VB6, но вам лучше использовать ['Encoding.UTF8.GetString'] (https://msdn.microsoft.com/en-us/library/744y86tc%28v=vs .110% 29.aspx), так как это «противоположное» действие того, что использовалось для получения байтов в первую очередь. –

+0

@JamesThorpe: Я согласен и добавил альтернативный код в свой ответ. Спасибо. – Blackwood

Смежные вопросы