2009-04-16 15 views
6

क्या कोई चरित्र निरंतर \ 000 और \ xhh यानी ऑक्टल संख्याओं और हेक्साडेसिमल संख्याओं के चरित्र को निरंतर निरंतर उपयोग कर सकता है?चरित्र निरंतर: 000 xhh

उत्तर

2

सी में, तार मूल्य शून्य के साथ एक चरित्र द्वारा समाप्त कर रहे हैं (0)। इसे इस तरह लिखा जा सकता है:

char zero = 0; 

लेकिन यह तारों के अंदर काम नहीं करता है। स्ट्रिंग अक्षर में एक विशेष वाक्यविन्यास होता है, जहां बैकस्लैश एस्केप अनुक्रम परिचय के रूप में काम करता है, और इसके बाद विभिन्न चीजें होती हैं।

ऐसा एक अनुक्रम "बैकस्लैश शून्य" है, जिसका अर्थ केवल शून्य शून्य वाला एक वर्ण है। इस प्रकार, आप इस तरह की बातें लिख सकते हैं:

char hard[] = "this\0has embedded\0zero\0characters"; 

एक और अनुक्रम, एक बैकस्लैश पत्र 'x' और एक या दो हेक्साडेसिमल अंक के बाद का उपयोग करता संकेत कोड के साथ चरित्र प्रतिनिधित्व करते हैं। इस वाक्यविन्यास का उपयोग करके, उदाहरण के लिए आप शून्य बाइट '\x0' लिख सकते हैं।

EDIT: प्रश्न को दोबारा पढ़ना, आधार आठ में ऐसे स्थिरांक के लिए भी समर्थन है, यानी ऑक्टल। वे अंकल शून्य के बाद बैकस्लैश का उपयोग करते हैं, जैसे कि ऑक्टल शाब्दिक पूर्णांक स्थिरांक। '\00' इस प्रकार '\0' के लिए समानार्थी है।

यह कभी-कभी उपयोगी होता है जब आपको गैर-प्रिंटिंग वर्ण, या विशेष नियंत्रण वर्ण वाली स्ट्रिंग बनाने की आवश्यकता होती है।

टैबलेट के लिए नई लाइन, '\t' के लिए '\n' जैसे एक-वर्ण "नामित" विशेष पात्रों का एक सेट भी है, और इसी तरह।

+0

क्या होगा यदि आप "इस \ 0has \ 00 वर्ण" लिखना चाहते हैं? \ 00 को एक बाइट '\ 0' या '\ 0', '0' के रूप में व्याख्या किया जाएगा? एक ऑक्टल भागने अनुक्रम की लंबाई की सीमा क्या है? – strager

+0

@स्ट्रैगर, उसे एक नहीं पता लेकिन आप <"यह \ 0has \ 0" "0 वर्ण"> का उपयोग कर सकते हैं क्योंकि सी उन्हें सिर्फ एक साथ चलाएगा। – paxdiablo

+0

लेकिन सी इसे केवल <"यह \ 0has \ 00 वर्ण"> से पढ़ेगा, क्योंकि यह शून्य मान \ 0 प्राप्त करेगा जो किसी भी स्ट्रिंग के अंत के लिए परीक्षण स्थिति है। आपका क्या मतलब है "आप शून्य बाइट लिख सकते हैं '\ x0'"? उत्तर के लिए धन्यवाद! – mawia

2

ऑक्टल आधार 8 (अंक 0-7 का उपयोग) है, इसलिए प्रत्येक अंक 3 बिट्स है:

\ 0354 = 11 101 100

हेक्साडेसिमल आधार 16 (0-9 अंक, वायुसेना का प्रयोग करके) और प्रत्येक अंक 4 बिट्स है:

\ x23 = 0010 0011

अंदर सी तार (चार सरणियों/संकेत), वे आम तौर बाइट्स आसानी से नहीं दर्शाया जा सकता है कि एन्कोड करने के लिए उपयोग किया जाता है।

इसलिए, यदि आप एक स्ट्रिंग जो एसटीएक्स और ETX तरह ASCII कोड का उपयोग करना चाहते हैं, आप कर सकते हैं:

char *msg = "\x02Here's my message\x03"; 
4

उन लोगों को संपादक में अन्यथा गैर-मुद्रित पात्रों को लिखने के लिए उपयोग किया जाएगा। मानक वर्णों के लिए, यह विभिन्न नियंत्रण वर्ण होंगे, wchar के लिए यह संपादक फ़ॉन्ट में वर्णित वर्ण नहीं हो सकता है।

उदाहरण के लिए, इस दृश्य स्टूडियो 2005 में संकलित:

const wchar_t bom = L'\xfffe';  /* Unicode byte-order marker */ 
    const wchar_t hamza = L'\x0621'; /* Arabic Letter Hamza */ 
    const char start_of_text = '\002'; /* Start-of-text */ 
    const char end_of_text = '\003'; /* End-of-text */ 

संपादित करें: का उपयोग करना अष्टाधारी चरित्र शाब्दिक एक दिलचस्प चेतावनी है। अस्थायी संख्याएं तीन अंकों से अधिक लंबे समय तक नहीं हो सकती हैं, जो कृत्रिम रूप से उन पात्रों को प्रतिबंधित करती हैं जिन्हें हम दर्ज कर सकते हैं।

उदाहरण के लिए:

 /* Letter schwa; capital unicode code point 0x018f (octal 0617) 
     *    small unicode code point 0x0259 (octal 1131) 
     */ 
    const wchar_t Schwa2 = L'\x18f'; /* capital letter Schwa, correct */ 
    const wchar_t Schwa1 = L'\617';  /* capital letter Schwa, correct */ 
    const wchar_t schwa1 = L'\x259'; /* small letter schwa, correct */ 
    const wchar_t schwa2 = L'\1131'; /* letter K (octal 113), incorrect */ 
संबंधित मुद्दे