2010-02-25 10 views
17

मैंने सोचा था कि Convert.ToBase64String() बाइट सरणी की बेस 64 स्ट्रिंग बनाने के लिए उपयोग करने का तरीका था, लेकिन मैं हाल ही में BitConverter.ToString() पर आया था। दोनों के बीच क्या अंतर है?बिटकोनवर्टर.ToString() बनाम कनवर्ट करें। ToBase64String()

और अधिक विशेष रूप से जब किसी दूसरे पर उपयोग किया जाना चाहिए?


एक MD5 डाइजेस्ट, CraigS एक जवाब राज्यों पर से एक टिप्पणी बनाने के बारे में this question में उदाहरण के लिए "ToBase64String वापस नहीं करता है कि मैं क्या चाहता हूँ। हालांकि, बाइट सरणी के आसपास चाल BitConverter.ToString करता है।"

BitConverter.ToString(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode)) 
).Replace("-", "") 

बनाम

Convert.ToBase64String(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode)) 
) 

इसके अलावा, क्या Base64 के लिए छवियों को एन्कोड करने के लिए इस्तेमाल किया जाना चाहिए?

public string ImageToBase64(int Img_ID) 
{ 
    byte[] tempBytes = showImageById(Img_ID); // get image from DB 
    return Convert.ToBase64String(tempBytes); 
} 

बनाम

public string ImageToBase64(int Img_ID) 
{ 
    byte[] tempBytes = showImageById(Img_ID); // get image from DB 
    return BitConverter.ToString(tempBytes).Replace("-", ""); 
} 
+1

आधार 16 (हेक्स) बनाम बेस 64! जाहिर है आधार 64 परिवर्तित स्ट्रिंग छोटा होगा। एक या दूसरे का उपयोग करने के संभावित कारणों के उत्कृष्ट स्पष्टीकरण के लिए – Fakrudeen

उत्तर

11

Convert.ToBase64String के लिए MSDN से:

आधार -64 शून्य से आरोही क्रम में अंकों अपरकेस वर्णों 'ए' के ​​लिए "Z" कर रहे हैं, लोअरकेस अक्षर "ए" से "ज़ेड", अंकों "0" से "9", और प्रतीक "+" और "/"। बेकार चरित्र, "=", पीछे पैडिंग के लिए प्रयोग किया जाता है।

wikipedia article on Base64 कैसे एल्गोरिथ्म वास्तव में कार्यों के बारे में भी बहुत कुछ शिक्षाप्रद है।

BitConverter प्रत्येक बाइट के हेक्स मान को दो अंकों के रूप में लेता है और उन्हें एक दूसरे के बाद एक डैश से अलग करता है।

दोनों को दोनों तरीकों से परिवर्तित किया जा सकता है।

पठनीयता के लिए, BitConverter किसी भी दिन बेस 64 स्ट्रिंग को धड़कता है, लेकिन बेस 64 स्ट्रिंग अधिक कॉम्पैक्ट है।

12

BitConverter.ToString बेस 64 एन्कोड नहीं करता है, यह हाइफेनेटेड हेक्साडेसिमल (बेस बाइट प्रत्येक बाइट के बीच डैश के साथ) में परिवर्तित हो जाता है।

आखिरकार, उस व्यक्ति का उपयोग करें जो आपके विशेष उपयोग के लिए समझ में आता है। यदि आप टेक्स्ट माध्यम (जैसे http) में बिट्स भेज रहे हैं तो बेस 64 का उपयोग करें, क्योंकि आपको कम समग्र डेटा संचारित करना होगा।

यदि आप उपयोगकर्ता को कुछ बाइनरी डेटा का टेक्स्ट प्रतिनिधित्व प्रदर्शित करना चाहते हैं, तो आप BitConverter.ToString() का उपयोग कर सकते हैं।

7

ToString method on BitConverter आपको बाइट सरणी को हेक्साडेसिमल प्रतिनिधित्व (आधार 16) में देने जा रहा है।

ToBase64String method on the Convert class आपको base 64-encoded string देगा।

उनमें से दोनों एक बाइट सरणी को स्ट्रिंग प्रस्तुति में बदलने का कार्य करते हैं जिसे फिर उलट किया जा सकता है (यह एक तरफा परिवर्तन नहीं है)।

यदि आप परिणामी स्ट्रिंग की लंबाई के बारे में चिंतित हैं तो Convert पर ToBase64String विधि का उपयोग करना आम तौर पर बेहतर होता है। चूंकि आधार -64 में आधार में एक वर्ण हो सकता है जो बड़ी संख्या में मान (बेस -16 से 4x अधिक) का प्रतिनिधित्व करता है, यह वर्णों की एक छोटी संख्या का उपयोग करके बड़ी संख्या का प्रतिनिधित्व कर सकता है।

आप पठनीयता बारे में चिंतित हैं (उदाहरण के लिए, एक प्रोग्रामर, या एक प्रदर्शन जहां बाइट डाटा प्रदर्शित किया जा रहा है के लिए एक फ़ाइल में बाइट्स दिखाते हैं) तो यह अधिक भावना BitConverter पर ToString विधि का उपयोग करने, बनाता है के रूप में अधिकांश लोग हेक्साइडसिमल (बेस -16) प्रारूप में बाइट डेटा देखने के आदी हैं।

+1

+1। – Randolpho

संबंधित मुद्दे