2011-12-19 70 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

相關問題