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


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


mbrtoc32()是C /C++中的內置函數,它將狹窄的多字節字符轉換為32位字符表示形式。它在C++的uchar.h頭文件中定義。

用法

size_t mbrtoc32( char32_t* pc32, const char* s, size_t n, mbstate_t* ps);

參數:該函數接受四個強製性參數,如下所述:


  • s:指定要轉換的多字節字符。
  • pc32:指定存儲位置以存儲結果的32位字符。
  • n:指定s中要轉換的最大字節數。
  • ps:指定在解釋多字節字符串時使用的mbstate_t對象。

返回值:該函數返回五個值,如下所示:

  • 如果轉換後的字符為空字符,則為0。
  • 成功轉換為32位字符的多字節字符的字節數(最多n個)。
  • 如果來自multi-char32_t字符(例如代理對)的下一個char16_t現在已寫入* pc32,則為-3。在這種情況下,不會從輸入中處理任何字節。
  • -2,如果接下來的n個字節構成一個不完整但到目前為止有效的多字節字符。在這種情況下,不會將任何內容寫入* pc32。
  • 如果發生編碼錯誤,則為-1。在這種情況下,不會將任何內容寫入* pc32,將errno設置為EILSEQ,並且未指定* ps的值。

以下示例程序旨在說明上述函數。
程序1

// C++ program to illustrate the 
// mbrtoc32() function 
#include <cstdio> 
#include <cstdlib> 
#include <iostream> 
#include <uchar.h> 
#include <wchar.h> 
using namespace std; 
  
int main(void) 
{ 
    char32_t pc32; 
    char s[] = "S"; 
    mbstate_t ps{}; 
    int length; 
  
    // initializing the function 
    length = mbrtoc32(&pc32, s, MB_CUR_MAX, &ps); 
  
    if (length < 0) { 
        perror("mbrtoc32() fails to convert"); 
        exit(-1); 
    } 
  
    cout << "Multibyte string = " << s << endl; 
    cout << "Length = " << length << endl; 
    printf("32-bit character = 0x%04hx\n", pc32); 
    return 0; 
}
輸出:
Multibyte string = S
Length = 1
32-bit character = 0x0053

程序2

// C++ program to illustrate the 
// mbrtoc32() function 
#include <cstdio> 
#include <cstdlib> 
#include <iostream> 
#include <uchar.h> 
#include <wchar.h> 
using namespace std; 
  
int main(void) 
{ 
    char32_t pc32; 
    char s[] = "S"; 
    mbstate_t ps{}; 
    int length; 
  
    // initializing the function 
    length = mbrtoc32(&pc32, s, MB_CUR_MAX, &ps); 
  
    if (length < 0) { 
        perror("mbrtoc32() fails to convert"); 
        exit(-1); 
    } 
  
    cout << "Multibyte string = " << s << endl; 
    cout << "Length = " << length << endl; 
    printf("32-bit character = 0x%08hx\n", pc32); 
    return 0; 
}
輸出:
Multibyte string = S
Length = 1
32-bit character = 0x00000053


相關用法


注:本文由純淨天空篩選整理自RICHIK BHATTACHARJEE大神的英文原創作品 mbrtoc32() in C/C++ with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。