2012-04-07 16 views
5

मैं एक सी/सी ++ प्रोग्राम लिख रहा हूं जिसमें एक स्ट्रिंग में एक संख्या का हेक्स प्रस्तुति डालना शामिल है और मैं उलझन में हूं कि कैसे \x काम करता है। मैंने उदाहरण देखा है जहां लोगों ने "\ xb2" जैसी चीजें लिखी हैं। इस मामले में, प्रोग्राम को कैसे पता चलेगा कि आप बी के हेक्स को नंबर 2 के बाद चाहते हैं या यदि आप बी 2 के हेक्स चाहते हैं? इसके अतिरिक्त, जब यह इसे स्मृति में संग्रहीत करता है तो क्या यह "\ x" वर्णों को सहेजता है या क्या यह हेक्स प्रतिनिधित्व को बचाता है?स्ट्रिंग में " x" कैसे काम करता है?

उत्तर

6

C99 मानक (6.4.4.4) से:

प्रत्येक अष्टाधारी या हेक्साडेसिमल एस्केप अनुक्रम अक्षर हैं जो का गठन कर सकते हैं एस्केप अनुक्रम की सबसे लंबी अनुक्रम है।

+0

और जब यह इस अनुक्रम को संग्रहीत करता है तो क्या यह वास्तव में अक्षर \ x को संग्रहीत करता है? – Nosrettap

+2

@Nosrettap: नहीं, अनुवाद संकलन समय पर किया जाता है। –

+0

मुझे पता है कि यह लगभग 6 साल पुराना है, लेकिन स्ट्रिंग में कुछ भी लिखे बिना हेक्साडेसिमल अनुक्रम से बचने का कोई तरीका है ?? कहें कि मैं 255 'ए' 'बी' 'सी' के साथ एक स्ट्रिंग रखना चाहता हूं। मैं "\ xffabc" नहीं लिख सकता और मैं "\ xff abc" नहीं लिख सकता क्योंकि मैं एक चरित्र जोड़ रहा हूं। – yakoudbz

3

उदाहरण के लिए, स्ट्रिंग "123\x45"31 32 33 45 के रूप में हेक्स में संग्रहित है।

ओली के उत्तर के अनुसार, '\ x' के बाद सबसे लंबा मान्य मान उपयोग किया जाता है।

'x' संग्रहित नहीं है। कोई भी बच अनुक्रम स्क्रीन पर दिखाई देने वाले वर्णों को संग्रहीत नहीं करता है, यह निर्दिष्ट वास्तविक वर्ण को संग्रहीत करता है। उदाहरण के लिए, '\ n' वास्तव में एक लाइनफीड चरित्र, 0x0A के रूप में संग्रहीत किया जाता है।

0

जब आप स्ट्रिंग के अंदर भागने अनुक्रम \ x का उपयोग करते हैं तो \ x वास्तव में इसके बाइनरी प्रतिनिधित्व में संग्रहीत डेटा होता है।

तो स्ट्रिंग "एबीसी" स्ट्रिंग के बराबर है "\ x414243"

आप प्रदर्शन-चरित्र के रूप में हेक्साडेसिमल मान फेंकना चाहते हैं, आप% x या% एक्स फॉर्मेट स्पेसिफायर का उपयोग करना चाहेंगे चरित्र:

printf("%X%X%X", 'A', 'B', 'C'); // emits "414243" 

धारा 1.2.6 देखें और सी लाइब्रेरी संदर्भ गाइड

आशा है कि स्पष्टीकरण में मदद करता है की धारा 1.2.7

0

अनुवाद संकलन-समय पर किया जाता है ताकि प्रत्येक स्ट्रिंग मैन्युअल रूप से \x के साथ स्रोत कोड में प्रवेश करे और इस तरह के चरित्र को द्विआधारी में दर्शाया गया हो। यदि आप रन-टाइम पर ऐसा करना चाहते हैं तो आपको हेक्स युक्त स्ट्रिंग को पार करने और इसे चार में डालने के लिए आधार 16 का उपयोग करके strtol() जैसे एक पार्स फ़ंक्शन को आमंत्रित करने की आवश्यकता होगी।

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