Study/Programming Language

[C++] N진법 <-> 10진법 변환하는 방법

찬 주 2025. 4. 2. 10:14

1. N진법 -> 10진법

C++에서는 stoi() 라이브러리를 사용하면 N진법을 쉽게 10진법으로 바꿀 수 있다. stoi()의 기본 형태는 다음과 같다.

int stoi(const string& str, size_t* idx = 0, int base = 10);
  • str: 변환할 문자열
  • idx: (선택) 변환이 끝난 위치를 저장할 포인터
  • base: (선택) 진법. 기본값은 10진수

여기서 base 값에 따라 진법 변환이 가능하다. 이때 base는 36까지만 가능하다!

/* 2진수 변환 */
string s = "1011";
int n = stoi(s, nullptr, 2); // → 11

/* 8진수 변환 */
string s = "17";
int n = stoi(s, nullptr, 8); // → 15

/* 16진수 변환 */
string s = "1A";
int n = stoi(s, nullptr, 16); // → 26

 

2. 10진법 -> N진법

10진법을 N진법으로 바꾸는 라이브러리는 존재하지 않기 때문에 직접 함수를 구현해서 사용해야 한다.

string toBase(int num, int base) {
    if (num == 0) return "0";

    string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string result;

    while (num > 0) {
        result = digits[num % base] + result;
        num /= base;
    }

    return result;
}