2012-03-22 80 views
7

我有一個字節是30個字節的數組,但是當我使用BitConverter.ToString時,它顯示十六進制字符串。該字節是 0x42007200650061006B0069006E00670041007700650073006F006D0065。 這也是Unicode。如何將字節數組轉換爲字符串?

這意味着B.r.e.a.k.i.n.g.A.w.e.s.o.m.e,但我不知道如何讓它從十六進制轉換爲Unicode到ASCII。

回答

14

您可以使用Encoding類之一 - 您需要知道這些字節在哪些編碼中。

string val = Encoding.UTF8.GetString(myByteArray); 

你顯示看起來像一個Unicode編碼的值,所以UTF8Unicode樣子好賭注。

+0

非常感謝你!哈哈它的工作。 – 2012-03-22 18:57:35

+3

@IanLundberg:請注意,如果您使用'Encoding.UTF8',您將得到一個字符串,其長度應爲輸入數據的兩倍。在某些輸出格式中,您可能不會*看到*,但其他每個字符都將是U + 0000。 – 2012-03-22 19:13:10

+0

哦,好吧我沒有意識到這一點 – 2012-03-23 01:32:16

4

它看起來就像是小尾數UTF-16,所以你要Encoding.Unicode

string text = Encoding.Unicode.GetString(bytes); 

您通常不應承擔編碼是什麼,但 - 它應該是你知道的數據進行處理。對於其他編碼,您顯然會使用不同的Encoding實例,但Encoding是文本二進制表示的正確類。

編輯:正如在評論中指出,你似乎缺少一個「00」,無論是從您的字節數組的開始(在這種情況下,你需要Encoding.BigEndianUnicode),或從年底(在這種情況下只要Encoding.Unicode很好)。 (當涉及到其他方式時,採用任意二進制數據並將其表示爲文本,則應該使用十六進制或base64,但這裏不是這種情況,但您應該知道它。)

(http://support.microsoft.com/kb/
相關問題