Namespaces
Variants

std:: setbase

From cppreference.net
< cpp ‎ | io ‎ | manip
헤더에 정의됨 <iomanip>
/*unspecified*/ setbase ( int base ) ;

스트림의 숫자 진법을 설정합니다. 표현식에서 out << setbase ( base ) 또는 in >> setbase ( base ) 로 사용될 때, base 값에 따라 스트림 out 또는 in basefield 플래그를 변경합니다:

8, 10, 16 이외의 base 값은 basefield 를 0으로 재설정하며, 이는 10진수 출력과 접두사 의존적 입력에 해당합니다.

목차

매개변수

base - basefield의 새 값

반환값

지정되지 않은 타입의 객체로서

  • 만약 out std:: basic_ostream < CharT, Traits > 타입의 객체라면, 표현식 out << setbase ( base )
    • 타입은 std:: basic_ostream < CharT, Traits > & 을 가짐
    • 값은 out 을 가짐
    • 마치 f ( out, base ) 을 호출한 것처럼 동작함
  • 만약 in std:: basic_istream < CharT, Traits > 타입의 객체라면, 표현식 in >> setbase ( base )
    • 타입은 std:: basic_istream < CharT, Traits > & 을 가짐
    • 값은 in 을 가짐
    • 마치 f ( in, base ) 을 호출한 것처럼 동작함

함수 f 가 다음과 같이 정의되는 경우:

void f(std::ios_base& str, int base)
{
    // 진수 필드 설정
    str.setf(base == 8 ? std::ios_base::oct :
        base == 10 ? std::ios_base::dec :
        base == 16 ? std::ios_base::hex :
        std::ios_base::fmtflags(0), std::ios_base::basefield);
}

예제

#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
    std::cout << "Parsing string \"10 0x10 010\"\n";
    int n1, n2, n3;
    std::istringstream s("10 0x10 010");
    s >> std::setbase(16) >> n1 >> n2 >> n3;
    std::cout << "hexadecimal parse: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
    s.clear();
    s.seekg(0);
    s >> std::setbase(0) >> n1 >> n2 >> n3;
    std::cout << "prefix-dependent parse: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
    std::cout << "hex output: " << std::setbase(16)
              << std::showbase << n1 << ' ' << n2 << ' ' << n3 << '\n';
}

출력:

Parsing string "10 0x10 010"
hexadecimal parse: 16 16 16
prefix-dependent parse: 10 16 8
hex output: 0xa 0x10 0x8

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 183 C++98 setbase std::ostream 또는 std::istream
타입의 스트림에서만 사용 가능
모든 문자 스트림에서
사용 가능

참고 항목

정수 입출력에 사용되는 진법을 변경합니다
(함수)
숫자 진법을 나타내는 접두사 사용 여부를 제어합니다
(함수)