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

C/C++ c16rtomb() 함수 완벽 정리: 16비트 문자를 멀티바이트 문자로 변환하는 방법

C++에서는 16비트 문자 표현(char16_t)을 사용할 수 있습니다. c16rtomb() 함수는 이러한 16비트 문자 표현을 좁은(narrow) 멀티바이트 문자 표현으로 변환하는 역할을 합니다. 이 함수는 uchar.h 헤더 파일에 정의되어 있으며, C11 표준부터 도입되었습니다.

c16rtomb() 함수의 매개변수

c16rtomb() 함수는 총 세 개의 매개변수를 받습니다.

  • 대상 문자열(s): 변환된 멀티바이트 문자가 저장될 문자 배열입니다.
  • 16비트 문자(c16): 변환하고자 하는 char16_t 타입의 문자입니다.
  • mbstate_t 객체 포인터(ps): 멀티바이트 문자열의 현재 변환 상태를 해석하는 데 사용되는 상태 객체입니다.

반환값

함수가 성공적으로 실행되면 대상 문자 배열에 기록된 바이트 수를 반환합니다. 변환에 실패하면 -1을 반환하며, 이때 EILSEQ 오류 코드가 설정될 수 있습니다.

사용 예제

다음 예제는 16비트 문자열 "Hello World"를 한 글자씩 c16rtomb() 함수로 변환하여 출력하는 코드입니다.

#include <iostream>
#include <uchar.h>
#include <wchar.h>
using namespace std;
int main() {
    const char16_t myStr[] = u"Hello World";
    char dest[50];
    mbstate_t p{};
    size_t length;
    int j = 0;
    while (myStr[j]) {
        length = c16rtomb(dest, myStr[j], &p); // c16rtomb()로 변환된 길이 얻기
        if ((length == 0) || (length > 50))
            break;
        for (int i = 0; i < length; ++i)
            cout << dest[i];
        j++;
    }
}

실행 결과

Hello World

정리

c16rtomb() 함수는 UTF-16 인코딩된 문자를 로캘에 맞는 멀티바이트 문자로 안전하게 변환할 수 있게 해주는 유용한 도구입니다. 특히 국제화(i18n) 작업이나 다양한 문자 인코딩을 다루는 프로그램에서 활용도가 높습니다. 반대 방향의 변환이 필요한 경우에는 mbrtoc16() 함수를 사용하면 됩니다.