当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


C++ mbrtoc16()用法及代码示例

C++ 中的 mbrtoc16() 函数将窄多字节字符转换为 16 位字符表示。

mbrtoc16() 函数在<cuchar> 头文件中定义。

mbrtoc16() 原型

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

mbrtoc16() 函数最多将 s 表示的 n 多字节字符转换为其等效的 utf-16 字符,并将其存储在 pc16 指向的内存位置。

如果 s 表示空指针,则忽略 npc16 的值,调用等效于 mbrtoc16(NULL, "", 1, ps)。

如果生成的结果字符为空,则转换状态*ps 表示初始移位状态。

参数:

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

返回:

mbrtoc16() 函数返回与以下情况匹配的以下值中的第一个:

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

示例: mbrtoc16() 函数如何工作?

#include <cstdio>
#include <cstdlib>
#include <cuchar>
#include <iostream>
using namespace std;

int main(void)
{
	char16_t pc16;
	char s[] = "x" ;
	mbstate_t ps{};
	int length;

	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 = 0x%04hx\n", pc16);

	return 0;
}

运行程序时,输出将是:

Multibyte string = x
Lengt>h = 1
16-bit character = 0x0078

相关用法


注:本文由纯净天空筛选整理自 C++ mbrtoc16()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。