Ben yapmak istiyorum:
int a = 255;
cout << a;
ve çıktıda FF gösteriyor mu, bunu nasıl yaparım?
Yanıtlar:
Kullanım:
#include <iostream>
...
std::cout << std::hex << a;
Baştaki sıfırlar ve büyük / küçük harf gibi çıktı numarasının tam biçimlendirmesini kontrol etmek için başka birçok seçenek vardır .
ios::fmtflags f(cout.flags());
ve ile geri yükleyebilirsiniz out.flags(f);
.
std::cout.flags(f);
Akışı onaltılık olarak yazdırmak üzere hex
değiştirmek için manipülatörü kullanın :
cout << hex << a;
Varsayılan olarak, onaltılık karakterler küçük harfle verilir. Büyük harf yapmak için uppercase
manipülatörü kullanın :
cout << hex << uppercase << a;
Çıktıyı daha sonra tekrar küçük harfe değiştirmek için nouppercase
manipülatörü kullanın :
cout << nouppercase << b;
nouppercase
ondalık çıkış geri değişecek?
Bunun OP'nin istediği şey olmadığını anlıyorum, ancak yine de bunun printf ile nasıl yapılacağına işaret etmeye değer olduğunu düşünüyorum. Neredeyse her zaman std :: cout yerine kullanmayı tercih ederim (önceden C geçmişi olmasa bile).
printf("%.2X", a);
'2' hassasiyeti, 'X' veya 'x' büyük / küçük harf durumunu tanımlar.
printf("hello\n")
eşdeğerdir fprintf(stdout, "hello\n")
. Daha kullanışlı bir şekilde, bağımsız değişken alan bir işleve geçebilirsiniz stdout
(veya stdin
, veya stderr
) FILE*
.
Kullanabileceğiniz farklı türde bayraklar ve maskeler de vardır. Lütfen bakın fazla bilgi için 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;
}
std::hex
size onaltılık formatlama sağlar, ancak durum bilgisi olan bir seçenektir, yani durumu kaydetmeniz ve geri yüklemeniz gerekir, aksi takdirde gelecekteki tüm çıktıları etkiler.
Saf bir şekilde geri dönmek std::dec
, yalnızca bayrakların daha önce bulunduğu yerdeyse iyidir, bu durum böyle olmayabilir, özellikle de bir kitaplık yazıyorsanız.
#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
Bu, Greg Hewgill'in cevabını ve başka bir sorudaki bilgileri birleştirir .
Onaltılık formatta görüntülenecek tamsayı değişkenini formatlamak için std::uppercase
ve tuşlarını kullanın .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;
}
C ++ 20 std::format
std::cout
Devleti şu şekilde kirletmediği için, şu anda bence en temiz yöntem std::hex
:
#include <format>
#include <string>
int main() {
std::cout << std::format("{:x} {:#x} {}\n", 16, 17, 18);
}
Beklenen çıktı:
10 0x11 18
Henüz GCC 10.0.1, Ubuntu 20.04'te uygulanmadı, bu yüzden henüz test etmedim.
Belgelendi:
Daha fazla bilgi için: std :: sprintf gibi string formatlama
Pre-C ++ 20: temiz bir şekilde yazdırın ve std::cout
önceki duruma geri yükleyin
main.cpp
#include <iostream>
#include <string>
int main() {
std::ios oldState(nullptr);
oldState.copyfmt(std::cout);
std::cout << std::hex;
std::cout << 16 << std::endl;
std::cout.copyfmt(oldState);
std::cout << 17 << std::endl;
}
Derleyin ve çalıştırın:
g++ -ggdb3 -O0 -std=c++11 -Wall -Wextra -pedantic -o main.out main.cpp
./main.out
Çıktı:
10
17
Daha fazla ayrıntı: std :: cout'un durumunu değiştirdikten sonra geri yükleyin
GCC 10.0.1, Ubuntu 20.04'te test edilmiştir.
cout << hex << a << dec;
onu eski haline getirmek gibi bir şey isteyebilirsiniz .