如何在VB.NET中将base64编码的文本转换为十六进制?

时间:2011-12-19 13:57:32

标签: .net vb.net hex base64

我在.net(FromBase64.string等)中遇到过一些Base64转换函数。我想要的是,对于一个示例,我有一个base 64编码的字符串

"48YwojCi4yaiow==".

我需要将此字符串转换为相应的十六进制文本(示例代表十六进制文本中的“Thisistest”) 以下链接是从base64到十六进制文本的在线转换器。如果您在链接中提供相同的base64编码数据,请单击转换,在“十六进制文本”下面看到的是我需要的。

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

vb.net中是否有标准库函数可以执行此操作?将base 64数据转换为十六进制文本?

2 个答案:

答案 0 :(得分:2)

您需要使用Convert.FromBase64String method首先将base64编码的字符串转换为字节数组。

然后,您可以获取该字节数组,并使用接受格式说明符的Byte.ToString重载将它们单独转换为等效的十六进制表示形式。可用的格式说明符记录为here,但您想要的是X or x for hexadecimal,具体取决于您是否希望字母大写。

如果您想将其全部隐藏起来以便于使用,您可以将所有这些封装到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 method而不是循环来调查,将字节数组中的每个值转换为等效的十六进制字符串表示形式。这将生成一个连字符描述的十六进制对字符串。

我不知道哪种方法“更好”或更高效。您必须对代码进行分析,或者选择您认为更具可读性的代码。

<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)

答案 1 :(得分:0)

您必须先将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();
}