名稱空間
變體
操作

mbrtoc8

來自 cppreference.com
< c‎ | string‎ | multibyte
在標頭檔案 <uchar.h> 中定義
size_t mbrtoc8( char8_t* restrict pc8, const char* restrict s, size_t n,
                mbstate_t* restrict ps );
(自 C23 起)

將窄多位元組字元轉換為 UTF-8 編碼。

如果 s 不是空指標,則檢查多位元組字元字串的最多 n 個位元組,從 s 指向的位元組開始,以確定完成下一個多位元組字元(包括任何移位序列)所需的位元組數。如果函式確定 s 中的下一個多位元組字元是完整且有效的,則將其轉換為 UTF-8 並將第一個 UTF-8 程式碼單元儲存在 *pc8 中(如果 pc8 非空)。

如果 *s 中多位元組字元的 UTF-8 編碼由多個 UTF-8 程式碼單元組成,那麼在第一次呼叫此函式後,*ps 將以以下方式更新:下次呼叫 mbrtoc8 將寫入額外的 UTF-8 程式碼單元,而不考慮 *s

如果 s 是空指標,則忽略 npc8 的值,並且呼叫等效於 mbrtoc8(nullptr, "", 1, ps)

如果生成的 UTF-8 程式碼單元是 u8'\0',則轉換狀態 *ps 表示初始移位狀態。

此函式使用的多位元組編碼由當前活動的 C 語言環境指定。

目錄

[編輯] 引數

pc8 - 指向將寫入生成的 UTF-8 程式碼單元的位置的指標
s - 指向用作輸入的多位元組字元字串的指標
n - s 中可檢查的位元組數的限制
ps - 指向轉換狀態物件的指標,用於解釋多位元組字串

[編輯] 返回值

以下適用情況中的第一個

  • 0 如果從 s 轉換(並存儲在 *pc8 中,如果非空)的字元是空字元。
  • s 成功轉換的多位元組字元的位元組數 [1n]
  • (size_t)-3 如果編碼由多個程式碼單元組成的字元的下一個 UTF-8 程式碼單元現在已寫入 *pc8。在這種情況下,不處理輸入中的位元組。
  • (size_t)-2 如果接下來的 n 個位元組構成一個不完整但目前有效的多位元組字元。不會寫入 *pc8
  • (size_t)-1 如果發生編碼錯誤。不會寫入 *pc8,值 EILSEQ 儲存在 errno 中,並且 *ps 的值未指定。

[編輯] 示例

[編輯] 參考

  • C23 標準 (ISO/IEC 9899:2024)
  • 7.30.1.1 mbrtoc8 函式

[編輯] 另請參閱

將 UTF-8 字串轉換為窄多位元組編碼
(function) [編輯]
C++ 文件 用於 mbrtoc8