C ++ cout hex मान?


144

मैं करना चाहता हूँ:

int a = 255; 
cout << a;

और क्या यह आउटपुट में FF दिखाता है, मैं यह कैसे करूंगा?

जवाबों:


201

उपयोग:

#include <iostream>

...

std::cout << std::hex << a;

रहे हैं कई अन्य विकल्प सटीक उत्पादन संख्या के स्वरूपण नियंत्रित करने के लिए इस तरह के अग्रणी शून्य और ऊपरी / निचले मामले के रूप में,।


34
यह भविष्य के सभी आउटपुट को कॉट से हेक्स में बदलने के लिए लगता है; इसलिए यदि आप केवल 'ए' को हेक्स में मुद्रित करना चाहते हैं तो आप cout << hex << a << dec;इसे वापस बदलना चाहते हैं ।
श्रीवत्सआर

16
@ श्रीवत्सआर हेक्स पर पुनर्स्थापना के साथ एक समस्या यह है कि डिक पहले से निर्धारित मूल्य नहीं हो सकता है, खासकर यदि आप एक सामान्य पुस्तकालय विधि लिख रहे हैं। इस सवाल के कुछ जवाब हैं कि राज्य को कैसे संग्रहीत और पुनर्स्थापित किया जाए। आप ios::fmtflags f(cout.flags());इसके साथ राज्य को बचा सकते हैं और इसे बहाल कर सकते हैं out.flags(f);
jtpereyda

फिर से बहालstd::cout.flags(f);
truthadjustr

43

std::hexद्वारा परिभाषित किया गया है <ios>जिसमें शामिल है <iostream>। लेकिन जैसी चीजों का उपयोग करने के लिए std::setprecision/std::setw/std::setfill/ आदि आपको शामिल करना होगा <iomanip>


42

हेक्साडेसिमल में प्रिंट करने के लिए स्ट्रीम में हेरफेर करने के लिए मैनिपुलेटर का उपयोग करें hex:

cout << hex << a;

डिफ़ॉल्ट रूप से हेक्साडेसिमल वर्ण लोअरकेस में आउटपुट होते हैं। इसे अपरकेस में बदलने के लिए uppercaseमैनिपुलेटर का उपयोग करें :

cout << hex << uppercase << a;

बाद में आउटपुट को वापस लोअरकेस में बदलने के लिए, nouppercaseमैनिपुलेटर का उपयोग करें :

cout << nouppercase << b;

2
क्या nouppercaseआउटपुट को वापस दशमलव में बदलना है?
Cœur

बस विविध नोट जोड़ने के लिए, उपरोक्त स्निपेट "APPLE" बनने के लिए एक इनपुट "सेब" नहीं बनाएगा।
१६:४४

20

यदि आप एक एकल हेक्स संख्या प्रिंट करना चाहते हैं, और फिर वापस दशमलव पर वापस लौटें तो आप इसका उपयोग कर सकते हैं:

std::cout << std::hex << num << std::dec << std::endl;

13

मैं समझता हूं कि यह वह नहीं है जो ओपी ने पूछा है, लेकिन मुझे अभी भी लगता है कि यह प्रिंटफ के साथ कैसे करना है। मैं लगभग हमेशा इसे std :: cout (यहां तक ​​कि पिछले C बैकग्राउंड के साथ भी) का उपयोग करना पसंद करता हूं।

printf("%.2X", a);

'2' सटीकता को परिभाषित करता है, 'X' या 'x' मामले को परिभाषित करता है।


4
लंबे समय से प्रिंटआउट बनाम कॉट बैटल है। बेशक, कॉट की अच्छी संपत्ति है कि यह ओस्ट्रीम से निकलता है और सभी अमूर्त लाभ प्राप्त करता है। C में स्ट्रीम ऑब्जेक्ट्स की कोई अवधारणा नहीं है और इस तरह प्रिंटफ और फ़र्प्रिंटf 2 अलग-अलग कमांड हैं। वास्तव में, यह अच्छा होता C में यदि stdout एक FILE * होता। चीजों को आसान बना दिया होता।
rlbond

11
@rlbond stdout सी में एक फ़ाइल * है
Étienne

4
जिसके कारण printf("hello\n")बराबर है fprintf(stdout, "hello\n")। अधिक उपयोगी रूप से, आप एक फ़ंक्शन के पास stdout(या stdinया stderr) पास कर सकते हैं जो एक FILE*तर्क लेता है ।
कीथ थॉम्पसन

11

विभिन्न प्रकार के झंडे और मुखौटे हैं जिनका आप उपयोग कर सकते हैं। अधिक जानकारी के लिए कृपया http://www.cplusplus.com/reference/iostream/ios_base/setf/ देखें ।

#include <iostream>
using namespace std;

int main()
{
    int num = 255;
    cout.setf(ios::hex, ios::basefield);
    cout << "Hex: " << num << endl;

    cout.unsetf(ios::hex);
    cout << "Original format: " << num << endl;

    return 0;
}

5
मुझे लगता है कि इस कोड का व्यवहार अपरिभाषित है। सेटफ ios :: basefield बिट्स को ios :: dec (मानक धाराओं के लिए डिफ़ॉल्ट) सहित साफ़ करता है, और केवल ios :: hex सेट करता है। जब ios :: hex परेशान है, तो ios :: basefield में हर बिट परेशान है। कैसे यह संख्या दूसरी बार छपी? सबूत है कि बिट्स सभी परेशान हैं : ideone.com/fYXyh6 । यह i ++ :: floatfield के लिए C ++ वॉल्यूम 2 ​​पेज 189 में सोचने के अनुसार अनुमत है, लेकिन यह ios :: basefield के बारे में ऐसा नहीं कहता है।
जोएल सोजग्रीन

10

std::hex आपको हेक्स स्वरूपण मिलता है, लेकिन यह एक राज्य विकल्प है, जिसका अर्थ है कि आपको राज्य को बचाने और पुनर्स्थापित करने की आवश्यकता है या यह भविष्य के सभी आउटपुट को प्रभावित करेगा।

Naively वापस स्विच करने के std::decलिए केवल तभी अच्छा है यदि वह झंडे पहले थे, जो कि मामला नहीं हो सकता है, खासकर यदि आप एक पुस्तकालय लिख रहे हैं।

#include <iostream>
#include <ios>

...

std::ios_base::fmtflags f( cout.flags() );  // save flags state
std::cout << std::hex << a;
cout.flags( f );  // restore flags state

यह ग्रेग हेविल के जवाब और जानकारी को एक अन्य प्रश्न से जोड़ता है ।


2

का प्रयोग करें std::uppercaseऔर std::hexप्रारूप पूर्णांक चर को aहेक्साडेसिमल स्वरूप में प्रदर्शित किया जा सके।

#include <iostream>
int main() {
   int a = 255;

   // Formatting Integer
   std::cout << std::uppercase << std::hex << a << std::endl; // Output: FF
   std::cout << std::showbase  << std::hex << a << std::endl; // Output: 0XFF
   std::cout << std::nouppercase << std::showbase  << std::hex << a << std::endl; // Output: 0xff

   return 0;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.