2012-09-21 13 views
21

यह एक आसान समस्या प्रतीत होता है लेकिन मुझे पता नहीं लगाया जा सकता है।सी # चार को बाइट (हेक्स प्रतिनिधित्व) में कनवर्ट करें

मैं बाइट (हेक्स प्रतिनिधित्व) में इस चरित्र < बदलने की आवश्यकता है, लेकिन अगर मैं

byte b = Convert.ToByte('<'); 

का उपयोग मैं 3c के बजाय (दशमलव प्रतिनिधित्व) मिलता है।

string hex = BitConverter.ToString(new byte[] { Convert.ToByte('<') }); 

या बस:

उत्तर

19

60 == 0x3C

आपके पास पहले से ही आपका सही उत्तर है लेकिन आप इसे गलत तरीके से देख रहे हैं।

0x हेक्साडेसिमल उपसर्ग
3C है 3 x 16 + 12

+0

धन्यवाद, यह जाने का तरीका है। – DropTheCode

10

आप हेक्साडेसिमल स्ट्रिंग के लिए एक बाइट सरणी परिवर्तित करने के लिए BitConverter.ToString विधि इस्तेमाल कर सकते हैं

string hex = Convert.ToByte('<').ToString("x2"); 
+0

धन्यवाद, लेकिन मैं एक बाइट की जरूरत है, अगर रूपांतरण के बाद मैं बाइट [] ख = ASCIIEncoding.ASCII.GetBytes (हेक्स) का उपयोग करें; मुझे 51 और 67 मूल्यों के साथ एक बाइट सरणी मिलती है। मुझे 3 सी की जरूरत है। – DropTheCode

+0

यदि आपको बाइट की आवश्यकता है तो 'टॉस्ट्रिंग' पर कॉल न करें, बस: 'बाइट बी = कन्वर्ट। टोबीट (' <'); '। इसके अलावा 'गेटबाइट्स' विधि ऐसा नहीं करती जो आपको लगता है। यह हेक्स स्ट्रिंग की अपेक्षा नहीं करता है। यह एक साधारण स्ट्रिंग की अपेक्षा करता है जहां निर्दिष्ट प्रत्येक एन्कोडिंग का उपयोग करके प्रत्येक वर्ण को बाइट में परिवर्तित किया जाता है - इसमें हेक्स के साथ कुछ लेना देना नहीं है। यदि आप मूल बाइट सरणी को हेक्स स्ट्रिंग से प्राप्त करना चाहते हैं तो आपको निम्न कार्य करना चाहिए: http: // stackoverflow।कॉम/ए/311179/2 9 407 –

3

आप ToString("x") का उपयोग कर हेक्स के लिए सांख्यिक मान परिवर्तित करना चाहते हैं:

string asHex = b.ToString("x"); 

हालांकि, ध्यान रखें कि आप कोड "<" चरित्र को बाइट में परिवर्तित करने के लिए उस विशेष चरित्र के लिए काम करेगा, लेकिन यह गैर-एएनएसआई वर्णों के लिए काम नहीं करेगा (जो बाइट में फिट नहीं होगा)।

4
char ch2 = 'Z'; 
Console.Write("{0:X} ", Convert.ToUInt32(ch2)); 
5

3c के बजाय 60 (दशमलव प्रतिनिधित्व) मिलता है।

नहीं, आपको कोई प्रतिनिधित्व नहीं मिलता है। आपको byte मिलता है जिसमें कुछ आंतरिक प्रतिनिधित्व में मूल्य 60/3 सी होता है। जब आप इसे देखें, यानी, जब आप इसे एक स्ट्रिंग में परिवर्तित करते हैं (स्पष्ट रूप से ToString() या अंतर्निहित रूप से), तो आपको दशमलव प्रतिनिधित्व 60 मिलता है।

इस प्रकार, आप यह सुनिश्चित करें कि आप स्पष्ट रूप से स्ट्रिंग, को बाइट परिवर्तित आधार आप चाहते हैं को निर्दिष्ट करना है। ToString("x"), उदाहरण के लिए एक हेक्साडेसिमल प्रतिनिधित्व में एक नंबर में परिवर्तित कर देंगे:

byte b = Convert.ToByte('<'); 
String hex = b.ToString("x"); 
संबंधित मुद्दे