Как преобразовать кодированный в base64 текст в шестнадцатеричный в VB.NET? - PullRequest
2 голосов
/ 19 декабря 2011

Я сталкивался с некоторыми функциями преобразования Base64 в .net (FromBase64.string и т. Д.). То, что я хочу, для примера, у меня есть строка 64 в кодировке как

"48YwojCi4yaiow==".

Мне нужно преобразовать эту строку в соответствующий шестнадцатеричный текст (образец обозначает «Thisistest» в шестнадцатеричном тексте) Ссылка ниже представляет собой онлайн-конвертер из base64 в шестнадцатеричный текст. Если в ссылке вы дадите те же данные в кодировке base64, нажмите «преобразовать», и мне нужно то, что показано ниже «Шестнадцатеричный текст».

http://www.hcidata.info/base64.htm

Есть ли стандартная библиотечная функция в vb.net, которая делает это? Преобразование данных базы 64 в шестнадцатеричный текст?

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Вам потребуется использовать метод Convert.FromBase64String , чтобы сначала преобразовать строку в кодировке base64 в массив байтов.

Затем вы можете взять этот массив байтов и по отдельности преобразовать их в их эквивалентное шестнадцатеричное представление, используя перегрузку Byte.ToString, которая принимает спецификатор формата. Доступные спецификаторы формата задокументированы здесь , но вам нужно либо X, либо x для шестнадцатеричного , в зависимости от того, хотите ли вы, чтобы буквы были заглавными или нет.

Вы можете инкапсулировать все это в метод расширения для класса String, если хотите скрыть все это для удобства использования. Например:

<System.Runtime.CompilerServices.Extension> _
Public Shared Function ConvertToHex(str As String) As String
    ' Convert the specified base64-encoded string into an array of bytes.
    Dim bytes As Byte() = Convert.FromBase64String(str)

    ' Loop through each of the items in the array and convert
    ' to their equivalent hexadecimal representations
    Dim sb As New StringBuilder()
    For Each b As Byte In bytes
        sb.Append(b.ToString("X2"))
    Next
    Return sb.ToString()
End Function

В качестве альтернативы, вы можете исследовать использование BitConverter.ToString метода вместо цикла для преобразования каждого из значений в байтовом массиве в их эквивалентные шестнадцатеричные строковые представления. Это приведет к выделенной дефисом строке шестнадцатеричных пар.

Я понятия не имею, какой метод "лучше" или более эффективен. Вам придется профилировать код или выбрать тот, который вы найдете более читабельным.

<System.Runtime.CompilerServices.Extension> _
Public Shared Function ConvertToHex(str As String) As String
    ' Convert the specified base64-encoded string into an array of bytes.
    Dim bytes As Byte() = Convert.FromBase64String(str)

    ' Convert each of the items in the array to a hex string.
    return BitConverter.ToString(bytes)
End Function

Если вам не нужны штрихи в строке, возвращаемой методом BitConverter.ToString, вам необходимо удалить их:

returnString.Replace("-", String.Empty)
0 голосов
/ 19 декабря 2011

Сначала необходимо преобразовать строку base64 в байты с помощью Convert.FromBase64String.Затем вам нужно отдельно преобразовать байты в шестнадцатеричное представление.

Пример (C #, но вы поймете, что идея)

string ToHexString(byte[] bytes) 
{
   StringBuilder sb = new StringBuilder();
   foreach (byte b in bytes) sb.Append(b.ToString("x2"));
   return sb.ToString();
}
...