स्ट्रिंग के भीतर एक स्ट्रिंग की खोज करना .NET में बेहद अच्छी तरह से समर्थित है लेकिन जब आप खोज करने के लिए आवश्यक डेटा स्ट्रिंग नहीं करते हैं तो आप क्या करते हैं?बाइट खोजना []
मेरे पास नेटवर्कस्ट्रीम के माध्यम से नियमित भाग में बाइनरी डेटा आ रहा है। पैकेट बाइनरी हैं लेकिन वे सभी बाइट्स के हस्ताक्षर अनुक्रम से शुरू होते हैं। मैं भाग को एक बड़े बफर में जमा करता हूं और स्टार्ट-ऑफ-पैकेट हस्ताक्षर की तलाश करता हूं।
मैं वास्तव में क्या देख रहा हूं byte[]
String.IndexOf(ss)
विधि के बराबर है। मुझे एक बुरा लगा है मुझे इसे लूप और एक राज्य मशीन के साथ लागू करने जा रहा है।
कोई सुझाव? आप के लिए खत्म है!
के रूप में सुझाव दिया, Array.IndexOf (बाइट) कम से कम मुझे एक स्पष्ट पाश बचत होगी। पोस्टिंग के बाद, यह पहला हस्ताक्षर बाइट खोजने के लिए मेरे पास हुआ, फिर एक मैच के लिए आगे की जांच करें जहां अंतिम हस्ताक्षर बाइट होना चाहिए, फिर यदि वे दोनों स्ट्रिंग के बाकी हिस्सों के लिए एक ब्रूट-फोर्स तुलना करने का प्रयास करते हैं। इस दृष्टिकोण का झूठा मैचों को सस्ती रूप से अस्वीकार करने का लाभ है और मुझे एक और खंड के लंबित आंशिक हस्ताक्षर होने पर सस्ती रूप से अस्वीकार करने की इजाजत है।
Google बताता है कि उपर्युक्त शानदार योजना "केएमपी" या न्यूथ-मॉरिस-प्रैट एल्गोरिदम का एक अपमानजनक मामला है। उज्ज्वल तरफ अगर नूथ ने अपना नाम रखा तो शायद यह बिजली की कमी हो गई है, नकारात्मक बात यह है कि जब भी मुझे अच्छा विचार होता है तो डोनाल्ड Knuth 25 साल पहले इसके बारे में सोचा था?
चूंकि मैं डोनाल्ड Knuth को अंक नहीं दे सकता, मुझे लगता है कि वे नेल्सन जाते हैं।
मुझे प्रोटोकॉल लिखना नहीं है, मैं विरासत हार्डवेयर से बात कर रहा हूं। मुझे अगले संस्करण को लिखना है और मैंने पहले से ही आपके सुझाव को निश्चित रूप से निर्दिष्ट कर दिया है। –