Les següentes funcions treballen amb Caràcters multibytes.
Funció mblen: int mblen(const char *str,size_t n);
str - Aquest és el punter al primer byte d'un caràcter multibyte.n - Aquest és el nombre màxim de bytes que cal comprovar per a la longitud de caràcters.
La funció mblen () retorna el nombre d'octals passats de la seqüència de múltiples bytes a partir de str, si es reconeix com un caràcter ample no nul. Retorna 0, si es reconeix un caràcter nul ample torna -1, si s'ha trobat una seqüència de bytes múltiples no vàlida o si no es pot analitzar un caràcter multi-byte complet.
#include <stdio.h>#include <stdlib.h>#include <string.h>int main () {int len;char *pmbnull = NULL;char *pmb = (char *)malloc( MB_CUR_MAX );wchar_t *pwc = L"Hi";wchar_t *pwcs = (wchar_t *)malloc( sizeof( wchar_t ));printf("Conversió a cadena multibyte\n");len = wcstombs( pmb, pwc, MB_CUR_MAX);printf("Caracters convertits %d\n", len);printf("Valor hexadecimal del primer caràcter multibyte: %#.4x\n", pmb);len = mblen( pmb, MB_CUR_MAX );printf( "Longitud en bytes de caràcter multibyte %x: %u\n", pmb, len );pmb = NULL;len = mblen( pmb, MB_CUR_MAX );printf( "Longitud en bytes de caràcter multibyte %x: %u\n", pmb, len );return(0);}
Funció mbstowcs: size_t mbstowcs(wchar_t *pwcs, const char *str, size_t n);
pwcs : aquest és el punter a una matriu d'elements wchar_t que és prou llarg per emmagatzemar una cadena ampla de caràcters de màxim.
str : Aquesta és la cadena de caràcters C de diversos bytes que s’ha d’interpretar.
n - Aquest és el nombre màxim de caràcters wchar_t a interpretar.
#include<stdio.h>#include<stdlib.h>#include<string.h>int main () {int len;char *pmbnull = NULL;char *pmb = (char *)malloc( MB_CUR_MAX );wchar_t *pwc = L"Hi";wchar_t *pwcs = (wchar_t *)malloc( sizeof( wchar_t ));printf("Conversió a cadena multibyte\n");len = wcstombs( pmb, pwc, MB_CUR_MAX);printf("Caracters convertits %d\n", len);printf("Valor hexadecimal del primer caràcter multibyte: %#.4x\n", pmb);printf("Tornant a la cadena de caràcters amples\n");len = mbstowcs( pwcs, pmb, MB_CUR_MAX);printf("Caracters convertits %d\n", len);printf("Valor hexadecimal del primer caràcter ampli %#.4x\n\n", pwcs);return(0);}
Funció mbtowc: int mbtowc(wchar_t *pwc, const char *str, size_t n);
pwc - Aquest és el punter a un objecte del tipus wchar_t.str - Aquest és el punter al primer byte d'un caràcter de diversos bytes.n - Aquest és el nombre màxim de bytes que cal comprovar per a la longitud de caràcters.
Si str no és NULL, la funció mbtowc () retorna el nombre de bytes consumits a partir de str, o 0 si s apunta a un byte nul, o -1 al fracàs.
Si str és NULL, la funció mbtowc () retorna nul si la codificació té un estat de desplaçament no trivial o zero si la codificació està sense estat.
#include <stdio.h>#include <stdlib.h>#include <string.h>int main () {char *str = "Aixos es un punter";wchar_t mb[100];int len;len = mblen(NULL, MB_CUR_MAX);mbtowc(mb, str, len*strlen(str) );wprintf(L"%ls \n", mb );return(0);}
Funció wctomb: int wctomb(char *str, wchar_t wchar);
Converteix l'ample wchar de caràcters a la seva representació multibyte i el guarda al començament de la matriu de caràcters apuntada per str .
str - Aquest és el punter a una matriu prou gran com per contenir un caràcter multibyte,
wchar : aquest és el caràcter ampli del tipus wchar_t.
Si str és NULL, la funció wctomb () retorna nul si la codificació té un estat de desplaçament no trivial, o zero si la codificació està sense estat.
#include <stdio.h>#include <stdlib.h>int main () {int i;wchar_t wc = L'a';char *pmbnull = NULL;char *pmb = (char *)malloc(sizeof( char ));printf("Conversio de caracter ampli:\n");i = wctomb( pmb, wc );printf("caracters convertits: %u\n", i);printf(": %.1s\n", pmb);printf("Intenteu convertir la destinacio quan es NULL:\n");i = wctomb( pmbnull, wc );printf("Caracters convertits: %u\n", i);/* això no imprimirà cap valor */printf("Multibyte caracter: %.1s\n", pmbnull);return(0);}
Més informació -> Estructures stdlib
Més informació -> Macros stdlib.h
Més informació -> llibreria <stdlib.h>
Més informació -> Macros stdlib.h
Més informació -> llibreria <stdlib.h>