2014-04-16 22 views
8

बाइनरी मोड में stdout सेट करने का कोई तरीका है? किसी भी ऑपरेशन के बिना कौन सा मोड stdout है, मेरे डीबगिंग मुद्दों से मुझे लगता है कि यह टेक्स्ट मोड में है, क्या यह सच है?बाइनरी मोड में stdout सेट करने का कोई तरीका है?

मैं समारोह की कोशिश की:

freopen(NULL,"wb",stdout)

लेकिन मेरे कार्यक्रम दुर्घटनाओं जब मैं यह कर रहा हूँ है।

+1

क्यों? 'stdout' को टेक्स्ट टर्मिनलों के साथ संगत माना जाना चाहिए। वर्तमान लोकेल के अनुसार आपको टेक्स्ट सेमेन्टिक्स मिलते हैं। (नोट, सी और सी ++ में अलग-अलग लोकेल सिस्टम हैं, और आपको लाइब्रेरी लोकेल को ओएस लोकेल से मेल खाने के लिए सकारात्मक कार्रवाई करने की आवश्यकता है।) – Potatoswatter

+0

यदि आपको 'बाइनरी मोड' की आवश्यकता है तो स्वरूपित आउटपुट को छोड़ दें - बिना प्रारूपित आउटपुट को चिपकाएं –

+0

किस उद्देश्य के लिए? एक बुरा विचार की तरह लगता है ... – tenfour

उत्तर

10

मैं द्विआधारी मोड (Windows पर) के लिए stdin और stdout सेट करने के लिए नीचे प्रस्तुत कोड की कोशिश की: क्योंकि इस मंच द्विआधारी और पाठ मोड पर

#ifdef _WIN32 
    #include <io.h> 
    #include <fcntl.h> 
#endif 
... 
#ifdef _WIN32 
    setmode(fileno(stdout),O_BINARY); 
    setmode(fileno(stdin),O_BINARY); 
#endif 

लिनक्स के तहत आप यह नहीं कर सकते, एक ही बात है ।

+0

यह काम करता है। आप fwrite ("a \ nb", 1, 3, stdout) करके इसका परीक्षण कर सकते हैं; यदि परिणामी फ़ाइल 3 बाइट्स है, तो stdout बाइनरी है। उपरोक्त setmode() कॉल के बिना, आप एक 4 बाइट फ़ाइल के साथ समाप्त हो जाएगा। –

0

सरल उत्तर नहीं है। मोड को तब निर्धारित किया जाता है जब iostream ऑब्जेक्ट का निर्माण होता है, और बाद में बदला नहीं जा सकता है। कुछ कार्यान्वयन बाद में इसे करने का साधन प्रदान कर सकते हैं, लेकिन यह मानकीकृत नहीं है। कुछ कार्यान्वयन पर, पर stdout पर मोड बदल सकता है, हालांकि मुझे लगता है कि औपचारिक रूप से, यह सी ++ में वर्जित है। (यह सी में परिभाषित कार्यान्वयन है) और जाहिर है, यह आपके कार्यान्वयन पर काम नहीं करता है।

आप सबसे अच्छी शर्त है कि यह पता लगाने के लिए कि आपका सिस्टम कंसोल डिवाइस ("/dev/tty" यूनिक्स के तहत, , मुझे लगता है, विंडोज के तहत), इसे वांछित मोड में खोलें, और आउटपुट के बारे में पता लगाएं।

+1

'कंस' की बजाय बस 'CON'' लेकिन यह मदद करने की संभावना नहीं है - परिदृश्यों में जहां आपको बाइनरी आउटपुट की आवश्यकता होती है, यह संभावना नहीं है कि आउटपुट कंसोल पर जा रहा है। आप शायद * कंसोल भी नहीं होगा। (सबसे सामान्य परिदृश्य एक सीजीआई स्क्रिप्ट है, उदाहरण के लिए, एक वेब सर्वर के लिए एक जेपीईजी गतिशील रूप से उत्पन्न करना।) –

संबंधित मुद्दे