क्या C # में एक तरीका है यह देखने के लिए कि क्या एक स्ट्रिंग बेस 64 एन्कोडेड है इसके अलावा सिर्फ इसे बदलने की कोशिश करें और देखें कि क्या कोई त्रुटि है? मेरे पास कोड कोड इस तरह है:
// Convert base64-encoded hash value into a byte array.
byte[] HashBytes = Convert.FromBase64String(Value);
मैं "बेस -64 स्ट्रिंग में अवैध चरित्र" से बचना चाहता हूं जो कि वैल्यू बेस 64 स्ट्रिंग मान्य नहीं होने पर होता है। मैं एक अपवाद को संभालने के बजाय सिर्फ जाँच करना और वापस लौटना चाहता हूं क्योंकि मुझे उम्मीद है कि कभी-कभी यह मान 64 बेस वाला नहीं होगा। क्या Convert.FromBase64String फ़ंक्शन का उपयोग करने से पहले जांचने का कोई तरीका है?
धन्यवाद!
अपडेट:
आपके सभी उत्तरों के लिए धन्यवाद। यहाँ एक विस्तार विधि है जिसका आप सभी उपयोग कर सकते हैं ताकि यह सुनिश्चित हो सके कि आपका तार एक अपवाद के बिना Convert.FromBase64String पास करेगा। .NET 64 के आधार पर परिवर्तित होने पर सभी अनुगामी और समाप्त होने वाले स्थानों की उपेक्षा करता है, इसलिए "1234" वैध है और इसलिए "1234" है
public static bool IsBase64String(this string s)
{
s = s.Trim();
return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
}
परीक्षण बनाम कैचिंग और अपवाद के प्रदर्शन के बारे में सोच रहे लोगों के लिए, इस आधार 64 के लिए ज्यादातर मामलों में अपवाद को पकड़ने की तुलना में जांचना तेज है जब तक कि आप एक निश्चित लंबाई तक नहीं पहुंचते। यह लंबाई जितनी तेज होती है
मेरे बहुत ही अवैज्ञानिक परीक्षण में: १०००० पुनरावृत्तियों के लिए चरित्र की लंबाई १,००,००० - ११०००० के लिए पहले परीक्षण करने के लिए यह २. uns गुना तेज़ था।
पात्रों की लंबाई 1 के लिए 1000 पुनरावृत्तियों के लिए - 16,000 परीक्षणों के कुल के लिए 16 वर्ण यह 10.9 गुना तेज था।
मुझे यकीन है कि एक बिंदु है जहां अपवाद आधारित विधि के साथ परीक्षण करना बेहतर है। मुझे नहीं पता कि वह किस बिंदु पर है।
\n\fLE16
- आपका तरीका इसके लिए गलत सकारात्मक परिणाम देगा। किसी को पढ़ने के लिए और एक मूर्ख विधि की तलाश में; मैं FormatException को पकड़ने या कल्पना-अनुकूल RegEx का उपयोग करने की सलाह दूंगा, stackoverflow.com/questions/475074/… देखें ।
@"^[a-zA-Z0-9\+/]*={0,2}$"
=
साइन का उपयोग करके कुछ मामलों में पैडिंग की आवश्यकता होती है । यदि पैडिंग गलत है, तो यह एक त्रुटि देगा, भले ही इनपुट एक अभिव्यक्ति से मेल खाता हो।