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

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

이 튜토리얼에서는 C++에서 문자열을 16진수 ASCII 값으로 변환하는 프로그램을 구현하는 방법에 대해 알아보겠습니다.

프로그래밍을 하다 보면 문자열 데이터를 16진수 형태로 표현해야 하는 경우가 종종 있습니다. 네트워크 통신에서 데이터를 전송하거나 디버깅 시 메모리 내용을 확인할 때 특히 유용합니다. 이번 글에서는 주어진 문자열의 각 문자를 해당하는 16진수 ASCII 값으로 변환하여 출력하는 코드를 살펴보겠습니다.

변환 원리

ASCII 문자는 각각 고유한 숫자 값을 가지며, 이 값을 16진수로 표현하면 두 자리 숫자가 됩니다. 예를 들어 소문자 't'의 ASCII 값은 10진수로 116이며, 이를 16진수로 변환하면 '74'가 됩니다. 따라서 문자열의 각 문자를 순회하면서 sprintf 함수와 %02X 서식 지정자를 사용하면 손쉽게 변환할 수 있습니다.

예제 코드

#include <stdio.h>
#include <string.h>

// 문자열을 16진수로 변환하는 함수
void convert_hexa(char* input, char* output){
    int loop = 0;
    int i = 0;
    while(input[loop] != '\0'){
        // 각 문자를 2자리 16진수로 변환하여 저장
        sprintf((char*)(output+i), "%02X", input[loop]);
        loop += 1;
        i += 2;
    }
    // 문자열의 끝을 표시
    output[i++] = '\0';
}

int main(){
    char ascii_str[] = "tutorials point";
    int len = strlen(ascii_str);

    // 각 문자당 2개의 16진수 문자가 필요하므로 (len*2)+1 크기 할당
    char hex_str[(len*2)+1];

    // 함수 호출
    convert_hexa(ascii_str, hex_str);

    printf("ASCII: %s\n", ascii_str);
    printf("Hexadecimal: %s\n", hex_str);

    return 0;
}

실행 결과

ASCII: tutorials point
Hexadecimal: 7475746F7269616C7320706F696E74

코드 설명

convert_hexa 함수: 입력 문자열을 한 문자씩 순회하면서 sprintf를 사용해 각 문자를 2자리 16진수로 변환합니다. 여기서 %02X는 대문자 16진수로 출력하되, 한 자리 수인 경우 앞을 0으로 채워 항상 2자리를 유지하도록 합니다.

출력 버퍼 크기: 각 ASCII 문자는 2개의 16진수 문자로 변환되므로, 출력 배열은 원본 문자열 길이의 2배에 널 종료 문자 공간 1바이트를 더한 (len*2)+1 크기로 선언해야 합니다.

공백 문자 처리: "tutorials point" 중간의 공백은 ASCII 값 32로, 16진수 '20'으로 변환된 것을 실행 결과에서 확인할 수 있습니다.