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() 함수를 사용하면 됩니다.