6.19.26 mbtowc Function

Converts a multibyte character to a wide character.

Attention: This function is implemented only by MPLAB XC32 C compilers.

Include

<stdlib.h>

Prototype

int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n);

Arguments

pwc
a pointer to where the converted multibyte character should be stored
s
the multibyte character to convert
n
The maximum number of bytes to consider for conversion

Return Value

If s is a null pointer, the function returns a nonzero or zero value, which indicates if multibyte character encodings, respectively, do or do not have state-dependent encodings.

If s is not a null pointer, the function returns 0 if s points to the null character, returns −1 if the processed bytes do not form a valid multibyte character, or returns the number of bytes of the converted multibyte character.

The returned value will never exceed n or the value of the MB_CUR_MAX macro.

Remarks

If a valid multibyte character (including any shift sequences) can be formed from no more than the next n bytes of the sequence pointed to by s, that multibyte character is converted to a wide character that is then stored to the object pointed to by pwc, provided that pointer is not null. If the corresponding wide character is the null wide character, the function is left in the initial conversion state.

Example

See the notes at the beginning of this chapter or section for information on using printf() or scanf() (and other functions reading and writing the stdin or stdout streams) in the example code.

#include <locale.h>
#include <wchar.h>
#include <stdlib.h>

void printWide(const char * mbstr)
{
  size_t len;
  wchar_t wstr;

  mbtowc(NULL, 0, 0); // reset the conversion state
  while(*mbstr) {
    len = mbtowc(&wstr, mbstr, 40);
    wprintf(L"%lc(%d)", wstr, len);
    mbstr += len;
  }
  wprintf(L"\n");
}

int main(void)
{
    setlocale(LC_CTYPE, "");
    printWide("PIC®");
}

Example Output

P(1)I(1)C(1)®(2)