সি ++ কাউট হেক্সের মান?


144

আমি করতে চাই:

int a = 255; 
cout << a;

এবং এটিতে আউটপুটে এফএফ প্রদর্শন করতে হবে, আমি এটি কীভাবে করব?

উত্তর:


201

ব্যবহার করুন:

#include <iostream>

...

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

নেতৃস্থানীয় জিরো এবং আপার / লোয়ার কেস হিসাবে আউটপুট সংখ্যার সঠিক বিন্যাসন নিয়ন্ত্রণ করার জন্য আরও অনেক অপশন রয়েছে


34
এটি ভবিষ্যতের সমস্ত আউটপুট সিউট থেকে হেক্সে পরিবর্তিত হবে বলে মনে হচ্ছে; সুতরাং আপনি যদি হেক্সে কেবল 'ক' মুদ্রিত হতে চান তবে আপনি cout << hex << a << dec;এটি আবার পরিবর্তন করতে চাইবেন want
শ্রীভাতসারআর

16
@ শ্রীভ্যাটসআর হেক্সের মাধ্যমে ডিক পুনরুদ্ধার করার একটি সমস্যা হ'ল এই সিদ্ধান্তটি আগে সেট করা মান নাও হতে পারে, বিশেষত যদি আপনি জেনেরিক লাইব্রেরি পদ্ধতি লিখছেন। রাষ্ট্রটি কীভাবে সংরক্ষণ এবং পুনরুদ্ধার করা যায় সে সম্পর্কে এই প্রশ্নের কিছু উত্তর রয়েছে। আপনি এর সাথে রাষ্ট্রটি সংরক্ষণ করতে ios::fmtflags f(cout.flags());এবং এর সাথে পুনরুদ্ধার করতে পারেন out.flags(f);
jtpereyda

তারপরে পুনরুদ্ধার করুনstd::cout.flags(f);
ট্রুথহোল্ডার

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দশমিক আউটপুট ফিরে পরিবর্তন করতে যাচ্ছেন?
সিউর

কেবল বিবিধ নোট যুক্ত করতে, উপরের স্নিপেট কোনও ইনপুট "আপেল" "অ্যাপল" হয়ে উঠবে না।
ট্রুথহোল্ডার

20

আপনি যদি একটি একক হেক্স নম্বর মুদ্রণ করতে চান এবং দশমিকের দিকে ফিরে যান তবে আপনি এটি ব্যবহার করতে পারেন:

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

13

আমি বুঝতে পেরেছি যে এটি ওপি যা চেয়েছিল তা নয়, তবে আমি এখনও মনে করি যে এটি প্রিন্টফের মাধ্যমে কীভাবে করা যায় তা উল্লেখ করা ভাল। আমি প্রায় সবসময় এটি স্টাডি :: কাউট (এমনকি কোনও পূর্ববর্তী সি ব্যাকগ্রাউন্ড ছাড়াও) ব্যবহার করতে পছন্দ করি।

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

'2' নির্ভুলতা সংজ্ঞায়িত করে, 'এক্স' বা 'এক্স' কেস সংজ্ঞায়িত করে।


4
দীর্ঘদিন ধরে একটি প্রিন্টফ বনাম কাউট যুদ্ধ চলছে। অবশ্যই, কউটের মধ্যে দুর্দান্ত সম্পত্তি রয়েছে যা এটি অস্ট্রিমে প্রাপ্ত এবং সমস্ত বিমূর্ত সুবিধা পেয়ে থাকে gets সি স্ট্রিম অবজেক্টের কোনও ধারণা নেই এবং সুতরাং প্রিন্টফ এবং এফপ্রিন্টফ 2 টি পৃথক কমান্ড রয়েছে। সত্যিই, স্ট স্টাউট যদি একটি ফাইল হয় তবে এটি সিতে ভালই হত। জিনিসগুলি আরও সহজ করে দিত।
rlbond

11
@rlbond stdout- এ সি একটি ফাইল * হয়
Étienne

4
যার কারণেই printf("hello\n")সমান fprintf(stdout, "hello\n")। আরও কার্যকরভাবে, আপনি একটি stdout(বা stdin, বা stderr) কোনও ফাংশনে যেতে পারেন যা FILE*আর্গুমেন্ট গ্রহণ করে।
কিথ থম্পসন

11

আপনি বিভিন্ন ধরণের পতাকা এবং মুখোশ ব্যবহার করতে পারেন। আরও তথ্যের জন্য দয়া করে http://www.cplusplus.com/references/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
আমি মনে করি এই কোডটির আচরণ অপরিজ্ঞাত। সেটসটি আইওএস :: বেসফিল্ড বিটগুলি সাফ করে, আইওএস :: ডিস (স্ট্যান্ডার্ড স্ট্রিমের জন্য ডিফল্ট) সহ এবং কেবল আইওএস :: হেক্স সেট করে। যখন আইওএস :: হেক্সটি আনসেট থাকে, তখন আইওএস :: বেসফিল্ডের প্রতিটি বিট সেট না থাকে set এটি দ্বিতীয়বার কীভাবে ছাপল? বিটগুলি সমস্ত আনসেট করা হয়েছে এমন প্রমাণ: আদর্শ one.com/fYXyh6 । এটি আইওএস :: ফ্ল্যাটফিল্ডের জন্য সি ++ ভল 2 পৃষ্ঠা 189 তে থিংকিং অনুসারে অনুমোদিত, তবে এটি আইওএস :: বেসফিল্ডের ক্ষেত্রে একই কথা বলে না।
জোয়েল সেজগ্রেন

10

std::hex আপনাকে হেক্স ফরম্যাটিং দেয় তবে এটি একটি রাষ্ট্রীয় বিকল্প, যার অর্থ আপনাকে রাষ্ট্র সংরক্ষণ এবং পুনরুদ্ধার করা দরকার বা এটি ভবিষ্যতের সমস্ত আউটপুটকে প্রভাবিত করবে।

নিখরচায় আবার স্যুইচ করা 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::hexa

#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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.