2010-03-30 20 views

उत्तर

1

यह एक विशेष चरित्र है जो इंगित करता स्ट्रिंग वास्तव में एक हेक्साडेसिमल संख्या है।

http://www.austincc.edu/rickster/COSC1320/handouts/escchar.htm

+1

ओपी को उस स्थान पर जोड़ने के बजाय वास्तव में पूर्ण उत्तर प्रदान करना सबसे अच्छा है जहां वे इसे पा सकते हैं - और उस लिंक में "हेक्साडेसिमल एस्केप कैरेक्टर" की तुलना में कोई और स्पष्टीकरण नहीं है। – Cascabel

1

आप इसे googled हो सकता था। उपयोगी वेबसाइट here

और मैं बोली:

एक्स अहस्ताक्षरित हेक्साडेसिमल पूर्णांक

इस तरह, आपके \xeb दशमलव में 235 की तरह है।

+0

वह लिंक 'printf()' द्वारा खपत प्रारूप स्ट्रिंग्स के वर्णन के लिए है और जैसा कि एक सी शाब्दिक से बचने वाले भागने वाले दृश्य नहीं हैं। यह सी ++ विशिष्ट भी है, लेकिन चूंकि ओपी पौराणिक भाषा सी/सी ++ के बारे में पूछ रहा है, इसलिए मैं इसे पास कर दूंगा। – RBerteig

24

\x एक हेक्साडेसिमल चरित्र भागने को इंगित करता है। इसका उपयोग उन अक्षरों को निर्दिष्ट करने के लिए किया जाता है जो टाइप करने योग्य नहीं हैं (जैसे शून्य '\x00')।

और "\xeb\x2a" एक शाब्दिक स्ट्रिंग है (प्रकार char *, 3 बाइट्स, अशक्त-समाप्त है), और '\xeb\x2a' (प्रकार int, 2 बाइट्स, नहीं अशक्त-समाप्त है, और सिर्फ एक और तरीका 0xEB2A लिखने के लिए, एक ऐसा किरदार स्थिर है या 60202 या 0165452)। वही नहीं :)

+3

"प्रकार' char', 2 बाइट्स है "- एचएम, मुझे नहीं लगता कि आम तौर पर 'char' में फिट होना जा रहा है। – Cascabel

+0

@ जेफ्रोमी पर्याप्त सच है, मुझे लगता है कि प्रकार को 'char [2]' के रूप में अधिक सटीक रूप से वर्णित किया गया है। अपडेट किया गया। – Seth

+0

'char \ 0] = '\ xeb'',' char [1] =' \ x2a'' 'जैसा ही' x \ xeb \ x2a' 'जैसा है? – user198729

0

\x का अर्थ है कि यह एक हेक्स चरित्र भागने वाला है। तो \xeb का अर्थ हैक्स में eb, या 235 दशमलव में। अयस्क जानकारी के लिए http://msdn.microsoft.com/en-us/library/6aw8xdf2.aspx देखें।

दूसरे के लिए, नहीं, वे समान नहीं हैं। डबल-कोट्स, ", इसका मतलब है कि यह वर्णों की एक स्ट्रिंग है, एक नल-टर्मिनेटेड वर्ण सरणी है, जबकि एक एकल उद्धरण, ', इसका मतलब है कि यह एक एकल चरित्र है, बाइट जो चरित्र दर्शाता है।

+0

सिंगल-उद्धृत अभिव्यक्ति एक बाइट वर्ण नहीं है। – Cascabel

2

आप जब कहते हैं:

Btw, ये वही कर रहे हैं:

"\ xeb \ x2a" बनाम '\ xeb \ x2a' ​​

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

+1

क्या आप '' xx \ x2a'' के बारे में थोड़ा विस्तार कर सकते हैं? – user198729

+0

'\ xeb' एक एकल वर्ण है (= एक बाइट) तो '\ xeb \ x2a' ​​दो बाइट्स = 16 बिट = लघु int –

+0

@ मार्टिन बेकेट: नहीं, एक वर्ण निरंतर जिसमें एक से अधिक वर्ण होते हैं, अभी भी एक int है ', एक 'छोटा int' नहीं। इसका मूल्य कार्यान्वयन परिभाषित किया गया है। –

1

\ x आपको चरित्र को हेक्साडेसिमल कोड द्वारा निर्दिष्ट करने की अनुमति देता है।

यह आपको अक्षर है कि सामान्य रूप से प्रिंट करने योग्य

10

(जिनमें से कुछ इस तरह के '\ n' = न्यू लाइन और '\ t' = टैब '\ ख' = घंटी के रूप में पूर्वनिर्धारित विशेष भागने दृश्यों है) नहीं कर रहे हैं निर्दिष्ट कर सकते हैं जैसा कि अन्य ने कहा है, \x एक बचने का अनुक्रम है जो "हेक्साडेसिमल-एस्केप-अनुक्रम" शुरू करता है।

C99 मानक से कुछ अधिक जानकारी:

एकल उद्धरण (') वर्ण एक "पूर्णांक लगातार चरित्र" जो (6.4.4 है का हिस्सा हैं का एक सेट के अंदर इस्तेमाल करते हैं।4/2 "वर्ण स्थिरांक"):

एक या अधिक multibyte, एकल उद्धरण में संलग्न 'x' में के रूप में वर्णों के अनुक्रम।

और

एक पूर्णांक चरित्र निरंतर प्रकार int है। एक पूर्णांक वर्ण स्थिरांक का मान जिसमें एक एकल वर्ण होता है जो एकल-बाइट निष्पादन वर्ण को मैप करता है, मैप किए गए वर्ण के प्रतिनिधित्व का संख्यात्मक मान पूर्णांक के रूप में व्याख्या किया जाता है। एक पूर्णांक वर्ण स्थिरांक का मान जिसमें एक से अधिक वर्ण होते हैं (उदा।, 'ab'), या एक वर्ण या भागने वाला अनुक्रम होता है जो एकल-बाइट निष्पादन वर्ण को मैप नहीं करता है, कार्यान्वयन-परिभाषित है।

तो '\xeb\x2a' के आपके उदाहरण में अनुक्रम एक कार्यान्वयन परिभाषित मान है। यह लक्ष्य मानदंड 0xeb2a या 0x2aeb होने की संभावना है कि लक्ष्य प्लेटफॉर्म बड़ा-एंडियन या छोटा-एंडियन है, लेकिन आपको निश्चित रूप से जानने के लिए अपने कंपाइलर के दस्तावेज़ों को देखना होगा।

डबल-कोट्स (") के सेट के अंदर उपयोग किए जाने पर हेक्स-एस्केप-अनुक्रम द्वारा निर्दिष्ट वर्ण शून्य-समाप्त स्ट्रिंग अक्षर का हिस्सा हैं।

C99 मानक से 6.4.5/3 "स्ट्रिंग शाब्दिक":

एक ही विचार शाब्दिक एक चरित्र स्ट्रिंग में अनुक्रम के प्रत्येक तत्व पर लागू या एक विस्तृत स्ट्रिंग शाब्दिक मानो कि यह एक में थे पूर्णांक वर्ण निरंतर या विस्तृत वर्ण निरंतर, सिवाय इसके कि सिंगल-कोट ' या तो स्वयं या भागने अनुक्रम \' द्वारा प्रतिनिधित्व योग्य है, लेकिन डबल-कोट " भागने अनुक्रम \" द्वारा प्रतिनिधित्व किया जाएगा।


अतिरिक्त जानकारी:

मेरी राय में, आप 'बहु-चरित्र' स्थिरांक का उपयोग कर से बचने से बचना चाहिए। केवल कुछ स्थितियां हैं जहां वे नियमित, पुराने int निरंतर उपयोग करके कोई मूल्य प्रदान करते हैं। उदाहरण के लिए, '\xeb\x2a' को अधिक मूल्यवान रूप से 0xeb2a या 0x2aeb के रूप में निर्दिष्ट किया जा सकता है, जो आप वास्तव में चाहते थे।

enum CommandId { 
    CMD_ID_READ = 'read', 
    CMD_ID_WRITE = 'writ', 
    CMD_ID_DEL = 'del ', 
    CMD_ID_FOO = 'foo ' 
}; 

कुछ पोर्टेबिलिटी के होते हैं:

एक क्षेत्र है कि मैं बहु चरित्र स्थिरांक कुछ काम का हो पाया है चालाक enum मूल्यों है कि एक डिबगर या स्मृति डंप में पहचाना जा सकता है साथ आने के लिए है उपरोक्त के साथ समस्याएं (उन प्लेटफार्मों के अलावा जिनके पास छोटी चींटियां या चेतावनियां हैं जिन्हें स्पू किया जा सकता है)। क्या पात्र छोटे-बड़े-बड़े आकार में enum मानों में समाप्त होते हैं, कोड अभी भी काम करेगा (जब तक आप enum मानों के साथ कुछ और अपवित्र नहीं कर रहे हैं)। यदि पात्र एक अंतहीनता का उपयोग करके मूल्य में समाप्त होते हैं जो कि आप अपेक्षित नहीं थे, तो यह डीबगर में मूल्यों को पढ़ने में आसान बना सकता है, लेकिन 'शुद्धता' प्रभावित नहीं होती है।

+0

'char \ 0] = '\ xeb', char [1] = '\ x2a''' जैसा ही 'x \ xeb \ x2a'' जैसा है? – user198729

+0

नहीं, जैसा कि उत्तर बताता है, '\ xeb \ x2a'' एक कार्यान्वयन-परिभाषित मान के साथ' int 'है। मान लगभग निश्चित रूप से 0xeb2a या 0x2aeb है; जो लगभग निश्चित रूप से मंच के अंत्येष्टि पर निर्भर करेगा। मुझे लगता है कि अगर कुछ साइन-इन करने का निर्णय लेते हैं तो कुछ कंपाइलर 'x \ x2a'' को 0xffffeb2a में बदल सकते हैं। मुझे नहीं पता कि यह कितना संभव हो सकता है। –

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