2012-03-22 18 views
7

मेरे पास एक बाइट है जो 30 बाइट्स की सरणी है, लेकिन जब मैं BitConverter.ToString का उपयोग करता हूं तो यह हेक्स स्ट्रिंग प्रदर्शित करता है। बाइट 0x42007200650061006B0069006E00670041007700650073006F006D0065 है। जो यूनिकोड में भी है।मैं एक बाइट सरणी को एक स्ट्रिंग में कैसे परिवर्तित करूं?

इसका मतलब है बीआर.ए.ए.के.आई.एन.एन.ए.जी.ए.ए.ए.ए.एस.ओ.एम.ई.ई., लेकिन मुझे यकीन नहीं है कि हेक्स से यूनिकोड से ASCII तक इसे कैसे परिवर्तित किया जाए।

उत्तर

14

आप Encoding कक्षाओं में से एक का उपयोग कर सकते हैं - आपको यह जानने की आवश्यकता होगी कि इन बाइट्स को एन्कोडिंग क्या है।

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

मूल्यों आप एक यूनिकोड एन्कोडिंग की तरह नज़र दिखाया गया है, इसलिए UTF8 या Unicode देखो अच्छा दांव की तरह।

+0

आपको बहुत बहुत धन्यवाद! हाहा यह काम किया। –

+3

@IanLundberg: ध्यान दें कि यदि आप 'एन्कोडिंग.यूटीएफ 8' का उपयोग करते हैं तो आपको एक स्ट्रिंग मिल जाएगी जो आपके इनपुट डेटा के लिए जितनी बार होनी चाहिए। कुछ आउटपुट रूपों में आप * * * नहीं देख सकते हैं, लेकिन हर दूसरे चरित्र U + 0000 होगा। –

+0

ओह ठीक है मुझे यह एहसास नहीं हुआ –

4

ऐसा लग रहा है, थोड़ा-endian UTF-16 है ताकि आप Encoding.Unicode हैं:

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

आप नहीं सामान्य रूप से मान लेना चाहिए क्या एन्कोडिंग हालांकि है - यह कुछ आप डेटा के बारे में पता होना चाहिए । अन्य एन्कोडिंग के लिए, आप स्पष्ट रूप से विभिन्न Encoding उदाहरणों का उपयोग करेंगे, लेकिन Encoding टेक्स्ट के बाइनरी प्रस्तुतियों के लिए सही कक्षा है।

संपादित करें: के रूप में टिप्पणी में बताया गया है, तुम्हारी याद आ रही होना दिखाई देते हैं एक "00" या तो अपने बाइट सरणी के शुरू (जिस स्थिति में आप Encoding.BigEndianUnicode जरूरत है) या अंत से (में से जो मामले अभी Encoding.Unicode ठीक है)।

(जब यह दूसरी तरफ दौर की बात आती है, हालांकि, मनमाने ढंग से बाइनरी डेटा लेना और पाठ के रूप में इसका प्रतिनिधित्व करना, आपको हेक्स या बेस 64 का उपयोग करना चाहिए। यह मामला यहां नहीं है, लेकिन आपको इसके बारे में पता होना चाहिए।)