std:: wcrtomb
|
헤더 파일에 정의됨
<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
|
|