Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 16진수 문자열을 ASCII 문자열로 변환하는 방법

개요

이 튜토리얼에서는 C++를 사용하여 16진수(hexadecimal) 값 문자열을 ASCII 값 문자열로 변환하는 프로그램을 만드는 방법을 알아보겠습니다.

16진수 값들로 구성된 문자열이 입력으로 주어지며, 우리의 목표는 해당 16진수 값을 해석하여 동일한 의미를 가지는 ASCII 문자열로 변환하는 것입니다.

변환 원리

16진수 두 자리는 정확히 1바이트(8비트)에 해당하며, 이는 하나의 ASCII 문자와 일대일로 대응됩니다. 따라서 변환 과정은 다음과 같이 진행됩니다.

  1. 입력받은 16진수 문자열에서 두 글자씩 잘라냅니다.
  2. 잘라낸 부분을 밑수 16(16진수)으로 해석하여 정수 값으로 변환합니다.
  3. 해당 정수 값을 char형 ASCII 문자로 변환한 뒤 결과 문자열에 추가합니다.
  4. 문자열의 끝까지 위 과정을 반복합니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;
string convert_ASCII(string hex){
    string ascii = "";
    for (size_t i = 0; i < hex.length(); i += 2){
       // 16진수 문자열에서 두 글자씩 추출
       string part = hex.substr(i, 2);
       // 밑수 16으로 해석하여 정수로 변환
       char ch = stoul(part, nullptr, 16);
       // 결과 ASCII 문자열에 추가
       ascii += ch;
    }
    return ascii;
}
int main(){
    cout << convert_ASCII("6176656e67657273") << endl;
    return 0;
}

실행 결과

avengers

코드 설명

  • hex.substr(i, 2): 인덱스 i부터 두 글자를 추출하여 16진수 한 바이트를 나타내는 부분 문자열을 얻습니다.
  • stoul(part, nullptr, 16): 문자열을 밑수 16으로 해석하여 unsigned long 타입의 정수로 변환합니다. 세 번째 인자가 진법을 지정합니다.
  • ascii += ch: 변환된 정수 값이 char형으로 암시적 형변환되어 결과 문자열에 추가됩니다.

예를 들어 입력값 "6176656e67657273"의 경우, "61"은 'a', "76"은 'v', "65"는 'e', "6e"는 'n'에 각각 대응되므로, 최종적으로 "avengers"라는 문자열이 출력됩니다.