Namespaces
Variants

wctob

From cppreference.net
Défini dans l'en-tête <wchar.h>
int wctob ( wint_t c ) ;
(depuis C95)

Rétrécit un caractère large c si son équivalent en caractère multioctet dans l'état de décalage initial est un octet unique.

Cela est généralement possible pour les caractères de l'ensemble de caractères ASCII, car la plupart des encodages multioctets (tels que UTF-8) utilisent des octets uniques pour encoder ces caractères.

Table des matières

Paramètres

c - caractère large vers caractère étroit

Valeur de retour

EOF si c ne représente pas un caractère multi-octets avec une longueur de 1 dans l'état de décalage initial.

sinon, la représentation sur un octet de c en tant que unsigned char convertie en int

Exemple

#include <locale.h>
#include <wchar.h>
#include <stdio.h>
#include <assert.h>
void try_narrowing(wchar_t c)
{
    int cn = wctob(c);
    if(cn != EOF)
        printf("%#x narrowed to %#x\n", c, cn);
    else
        printf("%#x could not be narrowed\n", c);
}
int main(void)
{
    char* utf_locale_present = setlocale(LC_ALL, "th_TH.utf8");
    assert(utf_locale_present);
    puts("In Thai UTF-8 locale:");
    try_narrowing(L'a');
    try_narrowing(L'๛');
    char* tis_locale_present = setlocale(LC_ALL, "th_TH.tis620");
    assert(tis_locale_present);
    puts("In Thai TIS-620 locale:");
    try_narrowing(L'a');
    try_narrowing(L'๛');
}

Sortie possible :

In Thai UTF-8 locale:
0x61 narrowed to 0x61
0xe5b could not be narrowed
In Thai TIS-620 locale:
0x61 narrowed to 0x61
0xe5b narrowed to 0xfb

Références

  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.29.6.1.2 La fonction wctob (p: 441)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.24.6.1.2 La fonction wctob (p: 387)

Voir aussi

(C95)
élargit un caractère étroit d'un octet en caractère large, si possible
(fonction)