📜  C / C++中的mbrtoc16()及其示例

📅  最后修改于: 2021-05-25 20:51:05             🧑  作者: Mango

mbrtoc16()是C / C++中的内置函数,可将狭窄的多字节字符转换为16位字符表示形式。它在C++的uchar.h头文件中定义。

语法

ssize_t mbrtoc16( char16_t* pc16, const char* s, size_t n, mbstate_t* ps);

参数:该函数接受四个强制性参数,如下所述:

  • s :指定要转换的多字节字符。
  • pc16 :指定存储位置以存储结果的16位字符。
  • n :指定s中要转换的最大字节数。
  • ps :指定在解释多字节字符串时使用的mbstate_t对象。

返回值:该函数返回五个值,如下所示:

  • 如果转换后的字符为空字符,则为0。
  • 已成功转换为16位字符的多字节字符的字节数(最多n个)。
  • -3,如果现在已将来自多个char16_t字符(例如代理对)中的下一个char16_t写入* pc16。在这种情况下,不会从输入中处理任何字节。
  • -2,如果接下来的n个字节构成一个不完整但到目前为止仍然有效的多字节字符。在这种情况下,不会将任何内容写入* pc16。
  • 如果发生编码错误,则为-1。在这种情况下,不会将任何内容写入* pc16,将errno设置为EILSEQ,并且未指定* ps的值。

下面的程序说明了上述函数。

程序1

// C++ program to illustrate the
// mbrtoc16() function
#include 
#include 
#include 
#include 
#include 
using namespace std;
  
int main(void)
{
    char16_t pc16;
    char s[] = "G";
    mbstate_t ps{};
    int length;
  
    // initializing the function
    length = mbrtoc16(&pc16, s, MB_CUR_MAX, &ps);
  
    if (length < 0) {
        perror("mbrtoc16() fails to convert");
        exit(-1);
    }
  
    cout << "Multibyte string = " << s << endl;
    cout << "Length = " << length << endl;
    printf("16-bit character = 0g%02hd\n", pc16);
}
输出:
Multibyte string = G
Length = 1
16-bit character = 0g71

程序2

// C++ program to illustrate the
// mbrtoc16() function
#include 
#include 
#include 
#include 
#include 
using namespace std;
  
int main(void)
{
    char16_t pc16;
    char s[] = "";
    mbstate_t ps{};
    int length;
    // initializing the function
    length = mbrtoc16(&pc16, s, MB_CUR_MAX, &ps);
  
    if (length < 0) {
        perror("mbrtoc16() fails to convert");
        exit(-1);
    }
  
    cout << "Multibyte string = " << s << endl;
    cout << "Length = " << length << endl;
    printf("16-bit character = 1e%04xy\n", pc16);
}
输出:
Multibyte string = 
Length = 0
16-bit character = 1e0000y
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。