यह बफर में पहली uint32 (अहस्ताक्षरित पूर्णांक 32 बिट) प्रिंट:
यहाँ एक समान प्रश्न पहले से ही उत्तर है।
सबसे पहले, यह बिग एंडियन का उपयोग करके बफर के पहले दो बाइट्स (यूआईएनटी 16) को पढ़ता है, फिर, यह 0xFFFFFFFF द्वारा गुणा करता है।
फिर, यह बफर में दूसरे चार बाइट्स (यूआईएनटी 32) को पढ़ता है, और इसे गुणा संख्या में जोड़ता है - जिसके परिणामस्वरूप बफर के पहले 6 बाइट से निर्मित एक संख्या होती है।
उदाहरण: विचार करें [बफर बी बी ए.ए. सीसी सीसी डीडी ...]
0xbb * 0xffffffff = 0xbaffffff45
0xbaffffff45 + 0xaaccccdd = 0xbbaacccc22
और ऑफसेट के बारे में है, यह उस तरह से चुना है:
पहली बार है, यह बाइट से पढ़ता को बाइट (टाइप करने के लिए coverts - UINT16)
दूसरी बार, यह बाइट से पढ़ता बाइट के लिए (टाइप करने के लिए कनवर्ट्स - यूआईएनटी 32)
तो इसे समेटने के लिए, यह बड़े एंडियन नोटेशन का उपयोग करके बफर के पहले 6 बाइट्स से एक संख्या बनाता है, और इसे कॉलिंग फ़ंक्शन पर लौटाता है।
आशा है कि यह आपके प्रश्न का उत्तर दे।
Wikipedia's Big Endian entry
संपादित
के रूप में किसी को टिप्पणी में कहा, मैं 0xFFFFFFFF 32 की एक बाएँ पारी होने के बारे में पूरी तरह से गलत था, यह सिर्फ एक संख्या गुणा है - मैं इसे किसी तरह का है यह सोचते हैं रहा हूँ आंतरिक प्रोटोकॉल का एक सही कानूनी बफर हेडर की गणना करने के लिए जो उनके अपेक्षा की अनुपालन करता है।
संपादित 2
मूल संदर्भ में समारोह पर देखने के बाद, मैं इस निष्कर्ष पर आए हैं:
यह फ़ंक्शन एक हैशिंग प्रवाह का एक हिस्सा है, और यह कि ढंग से काम करता है :
मुख्य प्रवाह एक स्ट्रिंग इनपुट और हैश आउटपुट के लिए अधिकतम संख्या प्राप्त करता है, फिर यह स्ट्रिंग इनपुट लेता है, इसे SHA-1 हैशिंग फ़ंक्शन में प्लग करता है।
SHA-1 हैशिंग रिटर्न एक बफर, यह है कि बफर लेता है, और उस पर हैश अनुक्रमण लागू होता है, के रूप में निम्नलिखित कोड अंश में देखा जा सकता:
return toNumber(crypto.createHash('sha1').update(input).digest()) % max
इसके अलावा, यह करने के लिए एक modulu का उपयोग करता है सुनिश्चित करें कि हैश इंडेक्स लौटाया गया है, अधिकतम संभव हैश से अधिक नहीं है।
बाएं शिफ्ट 16 बिट्स '0x10000' से गुणा करने के बराबर होंगे। मुझे यहां क्या समझ नहीं आ रहा है? – sqykly
अच्छी पकड़, मुझे पूरी तरह उलझन में मिला - इस बिंदु पर मैं केवल यह मान सकता हूं कि यह संख्या उत्पन्न करने के लिए उनमें से कुछ आंतरिक प्रोटोकॉल है - शायद एक चेकसम नंबर या कुछ ऐसा है? – NadavL
शायद यह अधिक समझ में आएगा '(uint << 32) - 1'? बस एक विचार – sqykly