Namespaces
Variants

std:: wcrtomb

From cppreference.net
헤더 파일에 정의됨 <cwchar>
std:: size_t wcrtomb ( char * s, wchar_t wc, std:: mbstate_t * ps ) ;

와이드 문자를 좁은 멀티바이트 표현으로 변환합니다.

만약 s 가 null 포인터가 아니라면, 이 함수는 wc 의 멀티바이트 문자 표현을 저장하는 데 필요한 바이트 수(시퀀스 전환을 포함하고 현재 멀티바이트 변환 상태 * ps 를 고려함)를 결정하고, 멀티바이트 문자 표현을 s 가 가리키는 첫 번째 요소를 시작으로 하는 문자 배열에 저장하며, 필요에 따라 * ps 를 갱신합니다. 이 함수는 최대 MB_CUR_MAX 바이트까지 쓸 수 있습니다.

만약 s 가 null 포인터인 경우, 이 호출은 내부 버퍼 buf 에 대해 std :: wcrtomb ( buf, L ' \0 ' , ps ) 와 동일합니다.

만약 wc가 널 와이드 문자 L ' \0 ' 라면, 널 바이트가 저장되며, 초기 shift 상태를 복원하는 데 필요한 shift sequence와 변환 상태 매개변수 * ps 가 초기 shift 상태를 나타내도록 업데이트됩니다.

목차

매개변수

s - 멀티바이트 문자가 저장될 narrow 문자 배열에 대한 포인터
wc - 변환할 wide 문자
ps - 멀티바이트 문자열을 해석할 때 사용되는 변환 상태 객체에 대한 포인터

반환값

성공 시, s 가 가리키는 첫 번째 요소를 갖는 문자 배열에 기록된 바이트 수(시프트 시퀀스를 포함하여)를 반환합니다.

실패 시 ( wc 가 유효한 와이드 문자가 아닌 경우), static_cast < std:: size_t > ( - 1 ) 를 반환하고, EILSEQ errno 에 저장하며, * ps 를 지정되지 않은 상태로 둡니다.

예제

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
void print_wide(const std::wstring& wstr)
{
    std::mbstate_t state{};
    for (wchar_t wc : wstr)
    {
        std::string mb(MB_CUR_MAX, '\0');
        std::size_t ret = std::wcrtomb(&mb[0], wc, &state);
        std::cout << "multibyte char " << mb << " is " << ret << " bytes\n";
    }
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wstring wstr = L"z\u00df\u6c34\U0001f34c"; // or L"zß水🍌"
    print_wide(wstr);
}

출력:

multibyte char z is 1 bytes
multibyte char ß is 2 bytes
multibyte char 水 is 3 bytes
multibyte char 🍌 is 4 bytes

참고 항목

와이드 문자를 멀티바이트 표현으로 변환합니다
(함수)
주어진 상태에서 다음 멀티바이트 문자를 와이드 문자로 변환합니다
(함수)
[virtual]
InternT 에서 ExternT 로 문자열을 변환합니다(예: 파일에 쓸 때)
( std::codecvt<InternT,ExternT,StateT> 의 가상 protected 멤버 함수)
C 문서 for wcrtomb