Tuesday 19 December 2017

सी printf प्रारूप कोड बाइनरी विकल्प


Printf आज्ञा अजनबी, यह एक बहुत बड़ा विषय है जो अनुभव की आवश्यकता है - कृपया लापता जानकारी भरें, विवरण को विस्तृत करें, और विवरण को सही करें यदि आप ध्यान दें: यह बाश-बिल्टइन कमांड के बारे में है - हालांकि, विवरण होना चाहिए एक बाहरी कमांड के लिए लगभग समान है जो कि POSIX का अनुसरण करता है GNU Awk को प्रारूप स्ट्रिंग के बाद एक कॉमा और एक printf आदेश के प्रत्येक तर्क के बीच की उम्मीद है। उदाहरण के लिए, देखें: कोड स्निपेट अन्य दस्तावेजों के विपरीत, मैं don039t आपको printf () सी फ़ंक्शन परिवार के लिए मैन्युअल पृष्ठ पर रीडायरेक्ट करना चाहता हूं। हालांकि, यदि आप अधिक अनुभव करते हैं, तो यह प्रारूप स्ट्रिंग्स और संशोधक के लिए सबसे विस्तृत विवरण होना चाहिए। इको कमांड के परस्पर विरोधी ऐतिहासिक कार्यान्वयन के कारण, POSIX अनुशंसा करता है कि printf को प्रतिध्वनित पसंद है। Printf कमांड प्रिंटफ () सिस्टम इंटरफ़ेस (सी फंक्शन) के समान प्रीफॉर्मेटेड पाठ को प्रिंट करने के लिए एक विधि प्रदान करता है। इको के लिए उत्तराधिकारी के रूप में इसका मतलब है और इसमें और अधिक सुविधाएँ और संभावनाएं हैं अन्य कारणों के अलावा, पीओएसआईएसक्स की सिफारिश करने के लिए बहुत अच्छा तर्क है: इको कमांड के दोनों ऐतिहासिक मुख्य फ्लेवर म्यूच्युअल अनन्य होते हैं, वे टकराते हैं। इस मुद्दे को हल करने के लिए एक कमांड लाइन का आविष्कार किया जाना था। पाठ स्वरूप को लेफ्टफार्मगत में दिया गया है जबकि सभी तर्क फॉरमेटस्ट्रिंग इंगित कर सकते हैं उसके बाद, यहां, ltARGUMENTSgt द्वारा इंगित किया गया है। इस प्रकार, एक ठेठ printf - कॉल दिखता है: जहां कहलाते हैं: snName: snquot प्रारूप विनिर्देश है, और दो चर तर्कों के रूप में पारित किए जाते हैं, एस को प्रारूप स्ट्रिंग अंक में (हर प्रारूप स्पेसिफायर के लिए जो आप देते हैं, printf एक तर्क का इंतजार करता है) । यदि दिया जाता है, तो आउटपुट को stdout (किसी तरह से sprintf () की तुलना करने के लिए मुद्रित करने के बजाय चर VAR को असाइन किया जाता है) - वि विकल्प can039t बैश 4.1 से पुराने बैश संस्करणों में सीधे सरणी अनुक्रमणिका को निर्दिष्ट करता है। 4.1 से नए संस्करणों में, printf के पहले गैर-विकल्प तर्क में विस्तार करते समय सावधान रहना चाहिए क्योंकि यह आसान कोड इंजेक्शन भेद्यता की संभावना को खोलता है। जहां प्रतिध्वनि को किसी भी मनमाने ढंग से कमांड के साथ बदल दिया जा सकता है विकल्पों की समाप्ति के संकेत देने के लिए यदि आपको चाहिए, तो हार्ड-कोडित प्रारूप स्ट्रिंग निर्दिष्ट करें या उपयोग करें - सटीक समान मुद्दे को पढ़ने के लिए भी लागू होता है। और मैपफ़ाइल के समान एक हालांकि उनके तर्कों में विस्तार प्रदर्शन कम आम है बेशक शैल में- तर्क सिर्फ स्ट्रिंग हैं, हालांकि, आम सी-नोटेशन प्लस संख्या-स्थिरांक के लिए कुछ अतिरिक्त प्रिंटिफ़ के लिए एक संख्या-तर्क देने के लिए पहचाने जाते हैं। सी लाइब्रेरी के सामान्य प्रिंटफ़ सम्मेलनों द्वारा स्वरूपित स्ट्रिंग समारोह स्प्रिंटफ़ अधिक जानकारी के लिए नीचे देखें और सामान्य सिद्धांतों की व्याख्या के लिए आपके सिस्टम पर स्प्रिंटफ़ (3) या प्रिंटफ़ (3) देखें। पर्ल अपने स्वयं के sprintf स्वरूपण करता है: यह सी फंक्शन स्प्रींटफ़ (3) को emulates करता है। लेकिन इसका उपयोग फ्लोटिंग-पॉइंट नंबरों को छोड़कर करते हैं, और फिर भी केवल मानक संशोधक की अनुमति है। आपके स्थानीय स्प्रिंटफ़ (3) में गैर मानक एक्सटेंशन इसलिए पर्ल से अनुपलब्ध हैं प्रिंटफ़ के विपरीत sprintf ऐसा नहीं करता जो आप शायद इसका मतलब यह है कि जब आप इसे अपनी पहली तर्क के रूप में एक सरणी दे देते हैं सरणी को स्केलर संदर्भ दिया जाता है, और स्वरूप के रूप में सरणी के 0 वें तत्व का उपयोग करने के बजाय, पर्ल प्रारूप के रूप में सरणी में तत्वों की गिनती का उपयोग करेगा, जो लगभग उपयोगी नहीं है Perls sprintf निम्नलिखित सार्वभौमिक रूप से ज्ञात रूपांतरणों को अनुमति देता है: इसके अलावा, पर्ल निम्नलिखित व्यापक रूप से समर्थित रूपांतरणों की अनुमति देता है: अंत में, पिछड़े (और हम पिछड़ा मतलब हैं) संगतता के लिए, पर्ल इन अनावश्यक लेकिन व्यापक रूप से समर्थित रूपांतरणों की अनुमति देता है: नोट करें कि ई द्वारा उत्पादित वैज्ञानिक संकेतन में एक्सपोनन अंक 100 से कम घातांक के मापांक के साथ संख्याओं के लिए ई। जी और जी सिस्टम-आश्रित हैं: यह तीन या कम (आवश्यक रूप से शून्य पैड) हो सकता है। दूसरे शब्दों में, 1.23 गुणा दस से 99 तक या तो 1.23e 99 या 1.23e0 99 हो सकता है। इसी प्रकार ए और ए के लिए एक्सपोनेंट या हेक्साडेसिमल अंक फ्लोट हो सकते हैं: विशेष रूप से लंबे युगल पर्ल कॉन्फ़िगरेशन विकल्प के कारण आश्चर्य हो सकता है। और प्रारूप पत्र के बीच, आप प्रारूप के व्याख्या को नियंत्रित करने के कई अतिरिक्त गुण निर्दिष्ट कर सकते हैं। क्रम में, ये हैं: एक स्पष्ट प्रारूप पैरामीटर सूचकांक, जैसे 2। डिफ़ॉल्ट रूप से sprintf सूची में अगले अप्रयुक्त तर्क को प्रारूपित करेगा, लेकिन इससे आप तर्क को क्रम से बाहर निकालने की अनुमति दे सकते हैं: जब एक स्थान और प्लस चिह्न दिए जाते हैं एक बार झंडे के रूप में, अंतरिक्ष पर ध्यान नहीं दिया जाता है। ओ रूपांतरण में ध्वज और सटीक दिए जाने पर, सटीकता बढ़ जाती है यदि इसकी प्रमुख 0 के लिए जरूरी है। यह फ़्लैग पर्ल को पूर्णांक के वेक्टर के रूप में आपूर्ति की स्ट्रिंग को व्याख्या करने के लिए कहता है, स्ट्रिंग में प्रत्येक वर्ण के लिए एक। पर्ल प्रत्येक पूर्णांक को बदले में प्रारूप पर लागू करता है, फिर परिणामस्वरूप स्ट्रिंग्स को एक विभाजक (डिफ़ॉल्ट रूप से एक डॉट) के साथ जोड़ता है। यह मनमाने ढंग से स्ट्रिंग्स में वर्णों के क्रमिक मानों को प्रदर्शित करने के लिए उपयोगी हो सकता है: संख्याओं को अलग करने के लिए स्ट्रिंग को ओवरराइड करने के लिए v से पहले तारांकन डालें: आप 2v जैसे कुछ की तरह स्ट्रिंग के लिए उपयोग करने के लिए तर्क नंबर भी स्पष्ट रूप से निर्दिष्ट कर सकते हैं। उदाहरण: दिए गए मान को प्रदर्शित करने के लिए आवश्यक रूप से तर्क के रूप में केवल व्यापक रूप में स्वरूपित किया जाता है। आप यहाँ एक संख्या डालकर चौड़ाई को ओवरराइड कर सकते हैं या अगले तर्क (के साथ) या एक विशिष्ट तर्क (जैसे 2 के साथ) से चौड़ाई प्राप्त कर सकते हैं: यदि क्षेत्र की चौड़ाई के माध्यम से प्राप्त की गई ऋणात्मक ऋणात्मक है, तो इसका एक ही प्रभाव - झंडा: वाम-औचित्य आप निर्दिष्ट करके एक सटीक (संख्यात्मक रूपांतरण के लिए) या अधिकतम चौड़ाई (स्ट्रिंग रूपांतरण के लिए) निर्दिष्ट कर सकते हैं। एक नंबर के बाद जी और जी को छोड़कर फ्लोटिंग-प्वाइंट प्रारूपों के लिए यह निर्दिष्ट करता है कि दशमलव बिंदु के ठीक कितने स्थानों को दिखाने के लिए (डिफ़ॉल्ट 6 होने वाला)। उदाहरण के लिए: जी और जी के लिए, यह दिखाने के लिए अधिकतम अंकों की अंकों को निर्दिष्ट करता है, दशमलव बिंदु से पहले और उदाहरण के बाद के उन लोगों सहित: पूर्णांक रूपांतरण के लिए, एक सटीक निर्दिष्ट करने से पता चलता है कि संख्या का उत्पादन शून्य होना चाहिए इस चौड़ाई में जोड़ा गया है, जहां 0 ध्वज को नजरअंदाज किया गया है: स्ट्रिंग रूपांतरण के लिए, एक सटीक निर्दिष्ट करने के लिए निर्दिष्ट चौड़ाई में फिट करने के लिए स्ट्रिंग को छोटा करता है: आप अगले तर्क से सटीक प्राप्त कर सकते हैं .. या निर्दिष्ट तर्क से .2): यदि एक सटीक प्राप्त नकारात्मक है, तो यह बिल्कुल सटीक नहीं होने के रूप में गिना जाता है। संख्यात्मक रूपांतरणों के लिए, आप संख्या का व्याख्या करते हुए l का उपयोग करने के लिए आकार निर्दिष्ट कर सकते हैं। एच। वी। क्यू एल या एल एल पूर्णांक रूपांतरण (ड्यूओक्स एक्स द्वि डीयूओ) के लिए, आमतौर पर संख्याएं आपके प्लेटफ़ॉर्म (आमतौर पर 32 या 64 बिट) पर डिफ़ॉल्ट पूर्णांक आकार हो जाती हैं, लेकिन आप इसके बजाय मानक सी प्रकारों में से एक का उपयोग करने के लिए ओवरराइड कर सकते हैं, जैसा कि समर्थित है पर्ल के निर्माण के लिए प्रयुक्त कंपाइलर द्वारा: 5.14 के रूप में, इनमें से कोई भी एक अपवाद नहीं उठाता है यदि वे आपके प्लेटफ़ॉर्म पर समर्थित नहीं हैं। हालांकि, अगर चेतावनियां सक्षम हैं, printf चेतावनी वर्ग की चेतावनी एक असमर्थित रूपांतरण ध्वज पर जारी की जाती है। यदि आप इसके बजाय एक अपवाद पसंद करते हैं, तो ऐसा करें: यदि आप प्रोग्राम चलाने शुरू करने से पहले एक संस्करण निर्भरता के बारे में जानना चाहते हैं, तो इस तरह अपने शीर्ष पर रखें: आप यह जान सकते हैं कि क्या पर्ल कॉन्फ़फ़ के माध्यम से क्वाड का समर्थन करता है: फ्लोटिंग - बिंदु रूपांतरण (ईएफजी ईएफजी), आमतौर पर संख्या को आपके प्लेटफ़ॉर्म (डबल या लंबी डबल) पर डिफ़ॉल्ट फ्लोटिंग-पॉइंट आकार मान लिया जाता है, लेकिन आप लंबे समय से q के साथ क्यू को मजबूर कर सकते हैं एल या एलई यदि आपका प्लेटफॉर्म उन्हें समर्थन करता है। आप यह जान सकते हैं कि क्या पर्ल कॉन्फ़टी के जरिए लंबी डबल्स का समर्थन करता है: आप पार्ल को कॉन्फ़्रैक्ट के माध्यम से अपने प्लेटफॉर्म पर उपयोग करने के लिए लंबे समय तक डबल फ्लोटिंग-प्वाइंट आकार के लिए समझते हैं या नहीं: यह भी हो सकता है कि लंबे युगल और युगल एक ही हो बात: आकार विनिर्देशक वी का पर्ल कोड के लिए कोई प्रभाव नहीं है, लेकिन एक्सएस कोड के साथ संगतता के लिए समर्थित है। इसका मतलब है कि पर्ल पूर्णांक या फ्लोटिंग-पॉइंट नंबर के लिए मानक आकार का उपयोग करें, जो कि डिफ़ॉल्ट है। आमतौर पर, स्प्रिंटफ़ प्रत्येक प्रारूप विनिर्देश के लिए प्रारूप के मान के रूप में अगले अप्रयुक्त तर्क को लेता है। यदि प्रारूप विनिर्देश अतिरिक्त तर्कों की आवश्यकता का उपयोग करता है, तो ये तर्क सूची से उपयोग किया जाता है, जो प्रारूप के मान से पहले प्रारूप विनिर्देश में दिखाई देते हैं। जहां एक स्पष्ट अनुक्रमणिका द्वारा तर्क निर्दिष्ट किया जाता है, यह तर्कों के सामान्य क्रम को प्रभावित नहीं करता है, तब भी जब स्पष्ट रूप से निर्दिष्ट सूचकांक अगले तर्क होता। चौड़ाई के लिए, परिशुद्धता के लिए ख का उपयोग करता है, और सी को फ़ॉर्मेट करने के लिए मान के रूप में उपयोग किया जाता है: यह चौड़ाई और सटीक के लिए उपयोग करेगा, और बी प्रारूप के मान के रूप में। यहां कुछ और उदाहरण दिए गए हैं कि एक स्पष्ट अनुक्रमणिका का उपयोग करते समय, बचने की आवश्यकता हो सकती है: यदि स्थान का उपयोग करें (लोकेल 39: notcharacters39 का प्रयोग करें) प्रभाव में है और POSIX :: setlocale को कहा जाता है, दशमलव विभाजक के लिए वर्णित वर्ण स्वरूपित फ़्लोटिंग-पॉइंट नंबर एलसीयुएररिक लोकेल द्वारा प्रभावित होता है। परिपत्र और पीओएसआईक्स. प्रिंटफ़ और स्कैनएफ़ प्रारूप कोड संख्या, सटीक के छह अंकों के साथ, वैज्ञानिक संकेतन फुटनोट: printf () में, अभिव्यक्ति प्रकार प्रोन्नति की अपेक्षा की जाती है - अभिव्यक्ति में, चार और छोटे को पूर्णांक में कनवर्ट किया जाता है, और फ्लोट को दोहरे रूप में परिवर्तित किया जाता है इस प्रकार सी वास्तव में प्रकार के एक पैरामीटर से मेल खाती है और एफ और जी वास्तव में डबल प्रकार के पैरामीटर के अनुरूप हैं इस प्रकार printf () में एफ और एलएफ, या जी और एलजी के बीच कोई अंतर नहीं है। हालांकि, scanf () में जो पारित किया गया है वह चर के लिए एक सूचक है, इसलिए प्रकार प्रकार के प्रचार होने या उम्मीद नहीं की जाती है। इस प्रकार एफ और एलएफ scanf में काफी अलग हैं, लेकिन printf में एक ही है। व्यक्तिगत रूप से, मैं नियमित रूप से एलसीडी के इस्तेमाल के लिए दोनों printf और scanf में डबल्स के लिए इस्तेमाल किया, लेकिन यह इन दिनों के पक्ष में है और वास्तव में जीसीसी आपको printf में एलजी का उपयोग करने के लिए एक चेतावनी संदेश देगा। सामान्य पद्धति यह है कि scanf में डबल के लिए printf और एलजी में डबल के लिए जी का उपयोग करना है। यह कोई फर्क नहीं पड़ता जो आप printf के लिए उपयोग करते हैं क्योंकि printf लाइब्रेरी फ़ंक्शन उन्हें समानार्थी मानता है, लेकिन scanf के लिए इसे सही करने के लिए महत्वपूर्ण है printf प्रारूप संशोधक संशोधक और कुंजी पत्र के बीच दिखाई देते हैं। एक संख्या एक फ़ील्ड चौड़ाई है। और एक संख्या एक सटीक उदाहरण है: printf (6.3f, 2.8) पैदावार 2.800 (2 से पहले एक स्थान के साथ) ध्यान दें कि 6 में 3 दशमलव स्थान और 1 शामिल हैं। - कुल 6 अक्षर। इस प्रकार दशमलव बिंदु के बाईं ओर 6-3-1 2 वर्ण। 0 (अंकीय शून्य) का मतलब है कि क्षेत्र की चौड़ाई के लिए शून्य के साथ पैड (आमतौर पर केवल पूर्णांक के साथ प्रयोग किया जाता है) एल (पत्र) का मतलब लंबा है, उदा। एलडी को दशमलव में एक लंबा इंटरेस्ट प्रारूप करने के लिए 0 का उदाहरण: 2. 3 (एक स्थान के बीच। और 3) 02d में, 0 फ़ील्ड की चौड़ाई का हिस्सा नहीं है। यह एक संशोधक चरित्र है और जब आपके पास क्षेत्र की चौड़ाई है, तो आपको इसे ऐसा लिखना होगा कि यह शून्य से शुरू नहीं होता (और फिर आप शून्य को एक संशोधक वर्ण के रूप में जोड़ सकते हैं यदि आप चाहते हैं)। आप बाइनरी प्रारूप में एक संख्या प्रदर्शित करना या आउटपुट करना चाहते हैं । Iostream केवल दशमलव, हेक्साडेसिमल और अष्टक के लिए आउटपुट मैनिपुलेटर है लोग आम तौर पर ऐसा करने के लिए एक पाश लिखते हैं जो कि पूर्णांक में प्रत्येक बिट पर दोहराता है: ऐसा करने के कई तरीके हैं, पाश को थोड़ा अस्थायी रूप से प्रिंट करने के लिए बिट को बदलते हैं और इसे 1 से अन्य सभी (उच्च ऑर्डर) बिट्स को हटा दें और 0 या 1 को छोड़ दें। यह सबसे महत्वपूर्ण बिट (31) के साथ शुरू होता है और कम से कम महत्वपूर्ण बिट (0) को पुनरावृत्त करता है, यह सुनिश्चित करता है कि बिट्स को सही क्रम में प्रिंट किया गया है। जबकि कुछ अन्य भाषाओं में एक लूपिंग समाधान अभी भी लागू होता है, तो सी में ऐसा करने के लिए एक बहुत अधिक सुरुचिपूर्ण तरीका है जिसे अक्सर नजरअंदाज किया जाता है: सी मानक पुस्तकालय में एक कंटेनर टाइप बिसेट होता है जिसका पहला गैर-प्रकार वाला टेम्प्लेट पैरामीटर बिट्स की संख्या निर्दिष्ट करता है स्टोर करने के लिए। इसमें ऑपरेटर लिट्लट के लिए एक ओवरलोड और इंट्रेट के लिए एक कनवर्ज़न कन्स्ट्रक्टर भी शामिल है, जिससे प्रिंटिंग बाइनरी नंबर को केक का एक टुकड़ा बनाया जाता है यह लूप के ऊपर के निर्माण के लिए गन्दा का एक बहुत अच्छा विकल्प है। बिट्ससेट का उपयोग करने के लिए, अपने कोड के शीर्ष पर जोड़ना याद रखें।

No comments:

Post a Comment