當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ mbrtowc()用法及代碼示例

C++ 中的mbrtowc() 函數將窄多字節字符轉換為寬字符(wchar_t 類型)。

mbrtowc() 函數在<cwchar> 頭文件中定義。

mbrtowc()原型

size_t mbrtowc( wchar_t* pwc, const char* s, size_t n, mbstate_t* ps );

mbrtowc()函數將s表示的多字節字符轉換為寬字符,並存儲在pwc指向的地址中。

  • 如果s不是空指針,最大n從指向的字節開始的字節s檢查以確定完成下一個多字節字符(包括任何移位序列)所需的字節數。
    如果接下來n多字節字符s完整且有效,函數將其轉換為對應的寬字符並存儲在指向的位置pwc.
  • 如果s為空指針,則參數npwc與函數調用無關,調用等價於std::mbrtowc(NULL, "", 1, ps)
  • 如果生成的寬字符為空字符,則存儲在*ps 中的轉換狀態為初始移位狀態。

參數:

  • pwc:指向存儲轉換後的寬字符的內存地址的指針。
  • s:指向要轉換的多字節字符的指針。
  • n:要檢查的 s 中的最大字節數。
  • ps:指向解釋多字節字符串時使用的轉換狀態的指針

返回:

mbrtowc() 函數返回以下第一個有效的值:

  • 如果從 s 轉換的寬字符為空(如果 pwc 不為空),則為 0。
  • 從 s 成功轉換的多字節字符數。
  • -2 如果接下來的 n 個字節不代表一個完整的多字節字符。
  • -1 是發生編碼錯誤,errno 設置為EILSEQ.

示例:mbrtowc() 函數如何工作?

#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;

void test_mbrtowc(const char *s, size_t n)
{
	mbstate_t ps = mbstate_t();
	wchar_t wc;
	int retVal = mbrtowc(&wc, s, n, &ps);
	
	if (retVal == -2)
		wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl;
	else if (retVal == -1)
		wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl;
	else if (retVal == 0)
		wcout << L"The converted wide character is a null wide character" << endl;
	else
	{
		wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, ";
		wcout << L"Resulting wide character is " << wc << endl;
	}
}

int main()
{
	setlocale(LC_ALL, "en_US.utf8");
	
	char str1[] = "\u00b5";
	char str2[] = "\0";
	
	test_mbrtowc(str1, 1);
	test_mbrtowc(str1, 5);
	test_mbrtowc(str2, 5);
	
	return 0;
}

運行程序時,輸出將是:

Next 1 byte(s) doesn't represent a complete multibyte character
Next 5 byte(s) hold 2 bytes of multibyte character, Resulting wide character is µ
The converted wide character is a null wide character

相關用法


注:本文由純淨天空篩選整理自 C++ mbrtowc()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。