std::wcrtomb
來自 cppreference.com
在標頭檔案 <cwchar> 中定義 |
||
std::size_t wcrtomb( char* s, wchar_t wc, std::mbstate_t* ps ); |
||
將一個寬字元轉換為其窄多位元組表示。
如果 s 不是空指標,則函式確定儲存 wc 的多位元組字元表示(包括任何移位序列,並考慮當前多位元組轉換狀態 *ps)所需的位元組數,並將多位元組字元表示儲存在第一個元素由 s 指向的字元陣列中,同時根據需要更新 *ps。此函式最多可以寫入 MB_CUR_MAX 位元組。
如果 s 是空指標,則此呼叫等價於 std::wcrtomb(buf, L'\0', ps),其中 buf
是某個內部緩衝區。
如果 wc 是空寬字元 L'\0',則儲存一個空位元組,前面是恢復初始移位狀態所需的任何移位序列,並且轉換狀態引數 *ps 將更新以表示初始移位狀態。
目錄 |
[編輯] 引數
s | - | 指向窄字元陣列的指標,多位元組字元將儲存在此處 |
wc | - | 要轉換的寬字元 |
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
[編輯] 另請參閱
將寬字元轉換為其多位元組表示 (函式) | |
將下一個多位元組字元轉換為寬字元,給定狀態 (函式) | |
[虛擬] |
將字串從 InternT 轉換為 ExternT ,例如寫入檔案時( std::codecvt<InternT,ExternT,StateT> 的虛擬保護成員函式) |
C 文件 中關於 wcrtomb 的內容
|