अस्वीकरण: इस नहीं वास्तव में एक सीधा जवाब है, बल्कि सवाल और सुझाव है कि एक टिप्पणी के लिए बहुत लंबा है की एक श्रृंखला है।
पहला प्रश्न: क्या आपके पास प्रोटोकॉल के दोनों सिरों पर नियंत्रण है, उदा। क्या आप स्वयं के माध्यम से चेकसम एल्गोरिदम चुन सकते हैं या दूसरे सिरे पर कोड को नियंत्रित करने वाले एक सहकर्मी?
हाँ सवाल करने के लिए, तो # 1:
आप का मूल्यांकन करने के कारण है कि आप चेकसम की जरूरत की जरूरत है, क्या चेकसम उचित है, और एक वैध चेकसम (जो दोनों में कारकों के साथ एक भ्रष्ट संदेश प्राप्त होने के परिणाम क्या & क्यों)।
आपका ट्रांसमिशन माध्यम, प्रोटोकॉल, बिटरेट इत्यादि क्या है? क्या आप बिट त्रुटियों की उम्मीद/निरीक्षण कर रहे हैं? तो उदाहरण के लिए, एक ही बोर्ड पर एक चिप से दूसरे में एसपीआई या आई 2 सी के साथ, यदि आपके पास कुछ त्रुटियां हैं, तो शायद यह एचडब्ल्यू इंजीनियरों की गलती है या आपको घड़ी की दर धीमी करने की आवश्यकता है या दोनों। एक चेकसम चोट नहीं पहुंचा सकता है, लेकिन वास्तव में आवश्यक नहीं होना चाहिए। दूसरी ओर, एक शोर वातावरण में अवरक्त सिग्नल के साथ, और आपके पास त्रुटि की बहुत अधिक संभावना होगी।
खराब संदेश के परिणाम हमेशा सबसे महत्वपूर्ण सवाल है। तो यदि आप डिजिटल रूम थर्मामीटर के लिए नियंत्रक लिख रहे हैं और एक प्रदर्शन को 10x प्रदर्शित करने के लिए एक संदेश भेज रहे हैं, तो किसी भी वास्तविक हानि के कारण कभी भी 1000 संदेशों में बहुत कम मूल्य होता है। कोई चेकसम या कमजोर चेकसम ठीक नहीं होना चाहिए।
यदि इन 6 बाइट्स मिसाइल को आग लगाते हैं, रोबोटिक स्केलपेल की स्थिति निर्धारित करते हैं, या पैसे के हस्तांतरण का कारण बनते हैं, तो आप बेहतर सुनिश्चित करते हैं कि आपके पास सही चेकसम है, और यहां तक कि एक क्रिप्टोग्राफिक हैश (जो भी एक क्रिप्टोग्राफिक हैश (आपके पास अधिक रैम की आवश्यकता हो सकती है)।
सामान के बीच में, उत्पाद के साथ प्रदर्शन/संतुष्टि के लिए ध्यान देने योग्य नुकसान के साथ, लेकिन कोई वास्तविक नुकसान नहीं, यह आपकी कॉल है।उदाहरण के लिए, एक टीवी जो कभी-कभी चैनल के बजाए वॉल्यूम को बदलता है, ग्राहकों से बाहर निकल सकता है - अगर कोई अच्छा सीआरसी किसी त्रुटि का पता लगाता है तो कमांड छोड़ने से कहीं ज्यादा, लेकिन यदि आप सस्ते/नॉक-ऑफ टीवी जो ठीक हो सकते हैं यदि यह तेजी से बाजार में उत्पाद प्राप्त करता है।
तो आपको किस चेकसम की आवश्यकता है?
यदि दोनों या दोनों सिरों में परिधीय (उदाहरण के लिए एसपीआई में काफी आम) में बनाए गए चेकसम के लिए एचडब्ल्यू समर्थन है, तो यह एक बुद्धिमान विकल्प हो सकता है। फिर यह गणना करने के लिए कम या ज्यादा मुक्त हो जाता है।
वल्कनिनो के उत्तर द्वारा सुझाए गए एक एलआरसी, सबसे सरल एल्गोरिदम है।
विकिपीडिया कैसे/क्यों एक बहुपद का चयन करने पर कुछ सभ्य जानकारी है यदि आप वास्तव में एक सीआरसी की जरूरत है: http://en.wikipedia.org/wiki/Cyclic_redundancy_check
कोई सवाल ही नहीं है तो # 1:
क्या सीआरसी एल्गोरिथ्म/बहुपद करता है दूसरी छोर की आवश्यकता है? यही वह है जिसे आप फंस गए हैं, लेकिन हमें बताएं कि आपको एक बेहतर/अधिक पूरा उत्तर मिल सकता है। कार्यान्वयन पर
विचार:
एल्गोरिदम के अधिकांश रैम/रजिस्टरों के मामले में बहुत हल्के वजन, केवल कुछ अतिरिक्त बाइट्स की आवश्यकता होती है। आम तौर पर, एक फ़ंक्शन के परिणामस्वरूप बेहतर, क्लीनर, अधिक पठनीय, डीबगर-अनुकूल कोड होगा।
आपको मैक्रो समाधान को ऑप्टिमाइज़ेशन चाल के रूप में सोचना चाहिए, और सभी अनुकूलन चालों की तरह, उन्हें जल्दी से कूदना विकास के समय की बर्बादी और इसके लायक होने की तुलना में अधिक समस्याओं का कारण हो सकता है।
आप सही पता है कि पूर्वप्रक्रमक गणना केवल कर सकते हैं संदेश में सभी बाइट्स संकलन समय पर तय कर रहे हैं कर रहे हैं:
को भी मैक्रो का उपयोग करना कुछ अजीब निहितार्थ आपने अभी तक विचार नहीं किया होगा है? यदि आपके पास एक चर है, तो कंपाइलर को कोड उत्पन्न करना होगा। किसी फ़ंक्शन के बिना, उस कोड को हर बार उपयोग किए जाने पर इनलाइन किया जाएगा (हां, इसका मतलब रोम के बहुत सारे उपयोग हो सकता है)। यदि सभी बाइट वेरिएबल हैं, तो यह कोड सी में फंक्शन लिखने से भी बदतर हो सकता है या एक अच्छा कंपाइलर के साथ, यह बेहतर हो सकता है। निश्चित रूप से कहना मुश्किल है। दूसरी तरफ, यदि संदेश भेजे जाने के आधार पर बाइट्स की एक अलग संख्या परिवर्तनीय होती है, तो आप कोड के कई संस्करणों के साथ समाप्त हो सकते हैं, प्रत्येक उस विशेष उपयोग के लिए अनुकूलित किए जाते हैं।
http://codegolf.stackexchange.com/questions/3268/compute-the-crc32-table-at-compile-time – Xophmeister
यदि गैर-अस्थिर स्मृति (फ़्लैश) की तुलना में गति आपके लिए अधिक महत्वपूर्ण है, तो आप सभी परिणाम पूर्व-गणना और निरंतर लुकअप तालिका में संग्रहीत हो सकते हैं। आपके द्वारा वर्णित सीआरसी बहुपद को "सीआरसी -8-सीसीआईटीटी" के रूप में जाना जाता है। मैं उस के लिए इष्टतम एल्गोरिदम नहीं जानता, मैं वेब पर खोज करने का सुझाव दूंगा। – Lundin