Вам потребуется использовать метод 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)