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

예제로 배우는 C/C++의 mbrtoc16() 함수 완벽 가이드


이 글에서는 C++ STL에서 제공하는 std::mbrtoc16() 함수의 동작 원리, 문법 그리고 실제 사용 예제를 자세히 살펴보겠습니다.

std::mbrtoc16()란 무엇인가?

std::mbrtoc16()은 C++ STL에 내장된 함수로, <cuchar> 헤더 파일에 정의되어 있습니다. 이 함수는 좁은(narrow) 멀티바이트 문자를 UTF-16 문자 표현으로 변환하는 데 사용됩니다.

연관된 문자 포인터가 NULL이 아니고 나머지 매개변수들도 올바르게 전달되면, 해당 문자에 대응하는 16비트 문자로 변환을 수행합니다.

문법

size_t mbrtoc16( char16_t* pc16, char* str, size_t n, mbstate_t* ps);

매개변수

이 함수는 다음과 같은 매개변수를 받습니다.

  • pc16 − 변환 결과를 저장할 위치를 가리키는 포인터입니다.
  • str − 입력으로 사용되는 문자열입니다.
  • n − 검사할 바이트 수입니다.
  • ps − 멀티바이트 문자열을 해석할 때 사용되는 상태 객체(state object)를 가리키는 포인터입니다.

반환값

이 함수는 아래 조건에 따라 서로 다른 값을 반환합니다.

  • 0 − 변환해야 할 str 내의 문자가 NULL(널 문자)인 경우 반환됩니다.
  • 1…n − 문자열 *str에서 변환된 멀티바이트 문자의 바이트 수입니다.
  • -3 − 서러게이트 쌍(surrogate pair)이 존재하는 경우, 즉 char16_t 값이 여러 개의 char16_t로 구성된 경우 반환됩니다. 이때 입력으로부터 생성되는 바이트는 없습니다.
  • -2 − 다음 n바이트가 불완전하지만 지금까지의 데이터는 유효한 멀티바이트 문자일 때 반환됩니다.
  • -1 − 인코딩 오류가 발생한 경우 반환되며, 이때는 *pc16에 아무것도 기록되지 않습니다.

예제

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <uchar.h>
#include <wchar.h>
using namespace std;
int main(void){
    char16_t hold;
    char str[] = "I";
    mbstate_t arr{};
    int len;
    // 함수 초기화 및 호출
    len = mbrtoc16(&hold, str, MB_CUR_MAX, &arr);
    if (len < 0) {
       perror("conversion failed");
       exit(-1);
    }
    cout << "String is: " << str << endl;
    cout << "Length is: " << len << endl;
    printf("16-bit character = 0g%02hd\n", hold);
}

실행 결과

String is: I
Length is: 1
16-bit character = 0g73