Example (btowc -- Convert Single Byte to Wide Character)

This example tests the complete range of values for an unsigned char and the value EOF. If a locale bound to SBCS is loaded, then the output is the wide character representation for each input value. When a locale bound to DBCS is loaded, the input values that correspond to the lead byte of a double byte character do not have a wide character representation.

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
#define UPPER_LIMIT   0xFF
int main(void)
{
   int wc;
   int ch;
   if (NULL == setlocale(LC_ALL, "")) {
      printf("Locale could not be loaded\n");
      exit(1);
   }
   for (ch = 0; ch <= UPPER_LIMIT; ++ch) {
      wc = btowc(ch);
      if (wc==WEOF) {
         printf("%#04x is not a one-byte multibyte character\n", ch);
      } else {
         printf("%#04x has wide character representation: %#06x\n", ch, wc);
      }
   }
   wc = btowc(EOF);
   if (wc==WEOF) {
      printf("The character is EOF.\n", ch);
   } else {
      printf("EOF has wide character representation: %#06x\n", wc);
   }
   return 0;
   /***********************************************************************
      If the locale is bound to SBCS, the output should be similar to:
      0000 has wide character representation: 000000
      0x01 has wide character representation: 0x0001
      0x02 has wide character representation: 0x0002
      ...
      0xfd has wide character representation: 0x00fd
      0xfe has wide character representation: 0x00fe
      0xff has wide character representation: 0x00ff
      The character is EOF.
      If the locale is bound to DBCS, the output should be similar to:
      0000 has wide character representation: 000000
      0x01 has wide character representation: 0x0001
      0x02 has wide character representation: 0x0002
      ...
      0x80 has wide character representation: 0x80
      0x81 is not a one-byte multibyte character
      0x82 is not a one-byte multibyte character
      0x83 is not a one-byte multibyte character
      ...
      0x9f is not a one-byte multibyte character
      0xa0 has wide character representation: 0xa0
      0xa1 has wide character representation: 0xa1
      0xa2 has wide character representation: 0xa2
      ...
      0xff has wide character representation: 0x00ff
      The character is EOF.
   ***********************************************************************/
}