[c++] C ++ cout 16 진수 값?

나하고 싶어:

int a = 255;
cout << a;

출력에 FF를 표시하면 어떻게해야합니까?



답변

사용하다:

#include <iostream>

...

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

선행 0 및 대소 문자와 같이 출력 번호의 정확한 형식을 제어하는 ​​다른 옵션많이 있습니다 .


답변

std::hex에 포함 된로 정의 <ios>됩니다 <iostream>. 그러나 std::setprecision/std::setw/std::setfill/ etc 와 같은 것을 사용 하려면 포함해야합니다 <iomanip>.


답변

16 진수로 인쇄 할 스트림을 조작하려면 조작기를 사용하십시오 hex.

cout << hex << a;

기본적으로 16 진 문자는 소문자로 출력됩니다. 대문자로 변경하려면 uppercase조작기를 사용하십시오 .

cout << hex << uppercase << a;

나중에 출력을 다시 소문자로 변경하려면 nouppercase조작기를 사용하십시오 .

cout << nouppercase << b;


답변

단일 16 진수를 인쇄 한 다음 10 진수로 되돌리려면 다음을 사용할 수 있습니다.

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


답변

나는 이것이 OP가 요구 한 것이 아니라는 것을 이해하지만, 여전히 printf로 그것을하는 방법을 지적 할 가치가 있다고 생각합니다. 나는 항상 std :: cout (이전 C 배경이 없어도)보다 그것을 사용하는 것을 선호합니다.

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

‘2’는 정밀도를 정의하고 ‘X’또는 ‘x’는 대소 문자를 정의합니다.


답변

사용할 수있는 다양한 종류의 플래그 및 마스크가 있습니다. 자세한 내용은 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 16 진 형식을 가져 오지만 상태 저장 옵션으로 상태를 저장하고 복원해야합니다. 그렇지 않으면 이후의 모든 출력에 영향을 미칩니다.

순진하게 다시 전환 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

이것은 Greg Hewgill의 답변과 다른 질문의 정보를 결합 합니다.