mbrtoc16() in C/C++ with Examples
The mbrtoc16() is a built-in function in C/C++ which converts a narrow multibyte character to a 16 bit character representation. It is defined within the uchar.h header file of C++.
Syntax:
ssize_t mbrtoc16( char16_t* pc16, const char* s, size_t n, mbstate_t* ps);
Parameters: The function accepts four mandatory parameter which are described below:
- s : specifies to the multibyte character to convert.
- pc16 : specifies to the memory location to store the resulting 16 bit character.
- n : specifies the maximum number of bytes in s to convert.
- ps : specifies to an mbstate_t object used when interpreting the multibyte string.
Return Value: The function returns five values as follows:
- 0 if the converted character is a null character.
- the number of bytes (at most n) of the multibyte character that was successfully converted to 16 bit character.
-
-3 if the next char16_t from a multi-char16_t character (e.g. a surrogate pair) has now been written to *pc16. No bytes are processed from the input in this case.
-
-2 if the next n bytes constitute an incomplete, but so far valid, multibyte character. In this case nothing is written to *pc16.
-
-1 if encoding error occurs. In this case nothing is written to *pc16, errno is set to EILSEQ and the value of *ps is unspecified.
Below programs illustrate the above function.
Program 1:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <uchar.h>
#include <wchar.h>
using namespace std;
int main( void )
{
char16_t pc16;
char s[] = "G" ;
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 = 0g%02hd\n" , pc16);
}
|
Output:
Multibyte string = G
Length = 1
16-bit character = 0g71
Program 2:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <uchar.h>
#include <wchar.h>
using namespace std;
int main( void )
{
char16_t pc16;
char s[] = "" ;
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 = 1e%04xy\n" , pc16);
}
|
Output:
Multibyte string =
Length = 0
16-bit character = 1e0000y
Last Updated :
04 Sep, 2018
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...