Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Fonction wctomb

La fonction wcstombs


Entête à inclure

#include <stdlib.h>  // <cstdlib> en C++

Fonction wctomb

int wctomb( char * multiBytesPtr, const char * wideChar );

Cette fonction, dont le nom signifie « wide characters to multibytes », permet de transformer un caractère « wide characters » (de type wchar_t) en un caractère « multibytes » (stocké sur un ou plusieurs octets).

dans la grande majorité des cas, vos chaînes de type « multibytes characters » seront basées sur encodage UTF-8 et vos chaînes de type « wild characters » seront basées sur un encodage UTF-16. Mais d'autres situations peuvent être envisagées.

Paramètres

Valeur de retour

Si le paramètre multiBytesPtr est non nul, la fonction renvoi -1 si la transformation ne peut être effectuée, ou le nombre d'octets utilisé par le caractère multibytes produit.

Si le paramètre multiBytesPtr est nul, la fonction renvoie une valeur non nulle si l'encodage propose des caractères de tailles variable, ou zéro si la place occupée par un caractère quelconque est fixe.

Exemple de code

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main() {

    // On se place en mode UTF-8 pour gérer des caractères multi-octets.
    setlocale( LC_ALL, "en_US.utf8" );

    // On crée une chaîne avec des caractères de type "wide char" en utilisant l'encodage UTF-16.
    const wchar_t * wstr = L"\u03c0 est un sigle mathématique.";

    // On affiche notre chaîne de caractères encodée en UTF-16
    printf( "%ls\n", wstr );

    // On transforme le premier caractère en représentation UTF-8 multibytes.
    char buffer[ MB_CUR_MAX + 1 ];      // +1 => le zéro terminal
    int charSize = wctomb( &buffer[0], wstr[0] );
    printf( "charSize == %d\n", charSize );

    // A t'on réussit la transformation ?
    if ( charSize != -1 ) {
        buffer[charSize] = '\0';
        // On affiche notre chaîne de caractères encodée en UTF-16
        printf( "%s\n", buffer );
    }

    return EXIT_SUCCESS;
}
Exemple d'utilisation de la fonction wctomb

Et voici les résultats produits par cet exemple :

$> gcc -o sample sample.c
$> ./sample
π est un sigle mathématique. 
charSize == 2
π
$> 

Sujets connexes

MB_CUR_MAX
mblen
mbstowcs
mbtowc
wcstombs


La fonction wcstombs