名稱空間
變體
操作

std::wcrtomb

來自 cppreference.com
< cpp‎ | string‎ | multibyte
在標頭檔案 <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 的內容