2011-12-19 32 views
2

我遇到了.net(FromBase64.string等)中的一些Base64转换函数。我要的是,对于一个样品,我有一个基地64编码字符串作为如何将base64编码的文本转换为VB.NET中的十六进制?

"48YwojCi4yaiow==". 

我需要这个字符串转换为相应的十六进制文本(样品中的十六进制文字代表“Thisistest”) 以下链接是一个从base64到十六进制文本的在线转换器。如果您在链接中提供相同的base64编码数据,请点击convert,在下面看到的那个“Hexadecimal text”是我需要的。

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

在vb.net中有标准库函数吗?将基础64数据转换为十六进制文本?

+0

http://msdn.microsoft.com/en- us/library/system.convert.frombase64string.aspx – 2011-12-19 14:01:14

+0

Base64是无关紧要的,任何字符串都是一个字节数组,然后用一些格式化BitConverter.ToString()来完成这项工作。 – 2011-12-19 14:06:50

回答

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) 
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(); 
} 
+0

请注意,不要对代码块使用blockquote格式,因为它忽略换行符并且不应用语法高亮显示。相反,单击代码格式化按钮 - 带花括号{}的那个按钮。 – 2011-12-19 14:02:59

+0

好的,谢谢你提供的信息:P我是新来的。 – dextrey 2011-12-19 20:16:16

相关问题