2009-01-27 13 views
11

मैं एक सी ++ कक्षा शुरू कर रहा हूं, और हेक्स प्रस्तुतियों और बाइनरी के बीच अक्षरों को परिवर्तित करना चाहता हूं। मैं हेक्स संख्याओं का उपयोग करके प्रिंट कर सकता हूं:मैं हेक्साडेसिमल संख्या को C++ में बाइनरी में कैसे परिवर्तित कर सकता हूं?

for(char c = 'a'; c <= 'z'; c++){ 
    cout << hex << (int)c; 
} 

लेकिन मैं बाइनरी के लिए ऐसा नहीं कर सकता। कोई std::bin है जिसका उपयोग मैं दशमलव संख्या को बाइनरी में कनवर्ट करने के लिए कर सकता हूं।

+3

मेरा सुझाव है कि आप हमें एक उदाहरण इनपुट/आउटपुट दिखाएं। – xtofl

उत्तर

48
तो जैसा

:

for(char c = 'a'; c <= 'z'; c++){ 
     std::bitset<sizeof(char) * CHAR_BIT> binary(c); //sizeof() returns bytes, not bits! 
     std::cout << "Letter: " << c << "\t"; 
     std::cout << "Hex: " << std::hex << (int)c << "\t"; 
     std::cout << "Binary: " << binary << std::endl; 
    } 
+3

मुझे इस बारे में कभी नहीं पता था! यही वही है जो ओपी चाहता था, और मैंने खुद कुछ नया सीखा। वोट दें! –

+1

हालांकि यह संभवतः std :: bitset बनाने के लिए सबसे अच्छा होगा। –

+0

वाह ... यह वाकई अच्छा है। काश मैं एक से अधिक बार मतदान कर सकता हूं। फिर भी, आपके उत्तर की उत्कृष्टता के बावजूद, होमवर्क प्रश्न के लिए कोड प्रदान करने के लिए आप पर शर्म आती है। – rmeador

5

सी ++ में बाइनरी आईओ मैनिपुलेटर नहीं है। आपको बिशफ़्ट ऑपरेटरों का उपयोग करके शायद हाथ से कवर करने की ज़रूरत है। वास्तविक रूपांतरण एक कठिन कार्य नहीं है, इसलिए सी ++ में शुरुआती की क्षमताओं के भीतर होना चाहिए (जबकि तथ्य यह है कि यह मानक पुस्तकालय में शामिल नहीं है :))

संपादित करें: बहुत से अन्य ने डाल दिया है ऊपर उदाहरण, इसलिए मैं अपने पसंदीदा तरीका

void OutputBinary(std::ostream& out, char character) 
{ 
    for (int i = sizeof(character) - 1; i >= 0; --i) 
    { 
    out << (character >> i) & 1; 
    } 
} 

यह देने के लिए भी संभवतः किसी भी सांख्यिक प्रकार के टेम्प्लेट किया जा सकता है जा रहा हूँ।

+1

और यहां फिर से आकार (चरित्र) ?? क्या आप लोग int के साथ एक उदाहरण से सी और पी करते थे? – AndreasT

4

विविधता के लिए, आप इसे 16 तत्व लुकअप टेबल का उपयोग करके भी कर सकते हैं।

+4

बस एहसास हुआ कि मैंने क्या एक भयानक पून बनाया है ... क्षमा करें: पी – freespace

+0

* ग्रोन * हाँ, भयानक पन। –

1

आप कुछ इस तरह कर सकते हैं: के बीच हेक्स charachters एक उनके बाइनरी 'निबल'

for(char c = 'a'; c <= 'z'; c++){ 
    // char is 8 bits. print 4 bits 
    // at a time, starting with the MSB 
    for (int i = 4; i>=0; i-=4) { 
     switch (((int)c >> i) & 0xf) { 
      case 0: 
       cout << "0000"; 
       break; 
      case 1: 
       cout << "0001"; 
       break; 
      . 
      . 
      . 
      case 0xf: 
       cout << "1111"; 
       break; 


     } 
    } 
} 
2

आप आसानी से एक मानचित्रण लिख सकते हैं:

std::string HexCharToNibble(char c) { 
switch (c) { 
    case '0': return "0000"; 
    case '1': return "0001"; 
    //... fill in the rest 
    case 'f': return "1111"; 
    default: assert(false); return "bad input"; 
}; 
+2

यह संस्करण निश्चित रूप से लुकअप टेबल का उपयोग करके किया जाना चाहिए। तथ्य यह है कि मूल कोड एक char लेता है भी भ्रमित हो जाएगा। –

0

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

टिप्पणियों में चुस्तर (ओक्यूर) का जवाब देना, मुझे यह मानना ​​होगा कि यदि आप समझते हैं कि यह कैसे करना है, यह कैसे/क्यों काम करता है, और भविष्य में इसे स्वयं कैसे समझें, तो हाँ , यह एक अच्छी बात होगी।

हालांकि, उन्होंने "सही" चिह्नित उत्तर को झूठ को उस तर्क में डाल दिया। इसमें "कोड की तरह" शब्दों से पहले कोड के अलावा कुछ भी नहीं है। यह स्पष्ट है कि OQ'er क्या खोज रहा था एक स्पष्टीकरण के लिए नहीं था, लेकिन किसी के लिए उसके लिए अपना कोड लिखना था।

+0

यह एक असाइनमेंट है, और जब तक मैं समझें कि यह कैसे करें, या यह कैसे/क्यों काम करता है, क्या यह वास्तव में मायने रखता है कि यह इंटरनेट या टीए से है? – chustar

+3

इसके अलावा, टेड ने हार्पर शेल्बी के उत्तर को मुझे ऊपर सिखाया (और टिप्पणियों का निर्णय, कुछ अन्य लोगों को भी) कुछ नया और उपयोगी, मुझे लगता है कि इस सवाल ने अपना उत्थान अर्जित किया है –

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

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