C++ 中的mbsrtowcs() 函數將窄多字節字符序列轉換為寬字符序列(wchar_t 類型)。
mbsrtowcs() 函數在<cwchar> 頭文件中定義。
mbsrtowcs()原型
size_t mbsrtowcs( wchar_t* dest, const char** src, size_t len, mbstate_t* ps );
mbsrtowcs()函數將第一個字節由*src
表示的多字節字符串轉換為相應的寬字符表示,並存儲在dest
指向的寬字符數組中。最多將 len
寬字符寫入 dest
。
轉換過程類似於重複調用mbrtowc()。如果出現以下情況,轉換將停止:
- 轉換並存儲了多字節空字符。在這種情況下,
src
設置為空,ps
表示初始移位狀態。 - 遇到無效的多字節字符。在這種情況下,
src
設置為指向第一個未轉換的多字節字符的開頭。 len
寬字符已存儲在dest
中。在這種情況下,src
設置為指向第一個未轉換的多字節字符的開頭。
參數:
dest
:指向存儲轉換後的寬字符的數組的指針。src
:指向要轉換的第一個多字節字符的指針。len
:要存儲的最大數字寬字符。ps
:指向解釋多字節字符串時使用的轉換狀態的指針
返回:
- 成功時,mbsrtowcs() 函數返回寫入 dest 的寬字符數,不包括終止寬空字符。如果 dest 是一個空指針,它會返回考慮到無限長度而應該寫入的寬字符數。
- 轉換錯誤時,返回 -1 並將 errno 設置為EILSEQ.
示例:mbsrtowcs() 函數如何工作?
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US.utf8");
const char* str = "\u0763\u0757\u077f\u075f";
wchar_t wstr[20];
mbstate_t ps = mbstate_t();
int len = 10;
int retVal;
retVal = mbsrtowcs(wstr, &str, len, &ps);
wcout << L"Number of wide characters written (excluding L\"\\0\") = " << retVal << endl;
wcout << L"Wide character = " << wstr << endl;
return 0;
}
運行程序時,輸出將是:
Number of wide characters written (excluding L"\0") = 4 Wide character = ݣݗݿݟ
相關用法
- C++ mbsrtowcs()用法及代碼示例
- C++ mbsinit()用法及代碼示例
- C++ mbstowcs()用法及代碼示例
- C++ mbtowc()用法及代碼示例
- C++ mbrtoc32()用法及代碼示例
- C++ mbrlen()用法及代碼示例
- C++ mbrtoc16()用法及代碼示例
- C++ mbrtowc()用法及代碼示例
- C++ mblen()用法及代碼示例
- C++ map lower_bound()用法及代碼示例
- C++ multimap key_comp()用法及代碼示例
- C++ merge()用法及代碼示例
- C++ multimap empty()用法及代碼示例
- C++ multimap cend()用法及代碼示例
- C++ multiset begin()、end()用法及代碼示例
- C++ map::at()用法及代碼示例
- C++ multiset value_comp()用法及代碼示例
- C++ multimap insert()用法及代碼示例
- C++ memset()用法及代碼示例
- C++ map max_size()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ mbsrtowcs()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。