/*************************************************************************************************************************************/ /* */ /* G E S T I O N D E S C O D E S ' UTF-8 ' : */ /* */ /* */ /* Author of '$xtc/UTF_8.01$vv$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20250207095646). */ /* */ /*************************************************************************************************************************************/ #include "INCLUDES.01.I" extern double log(); #define LOG2(x) \ log((double)x)/log((double)2) #define NHXOC \ 4 #define NOMBRE_MINIMAL_DE_CHIFFRES_HEXADECIMAUX \ 4 #define NOMBRE_MAXIMAL_DE_CHIFFRES_HEXADECIMAUX \ 20 void main() { unsigned char ListeDesCodes[]={0xF3,0xA0,0x84,0xB3}; unsigned char ListeDesMasques[]={0x03,0x3F,0x3F,0x3F}; /* Voir a ce propos 'v $xcp/conversion_UTF_8$K'. Le code attendu est "󠄳". */ unsigned long int CumulDesMasques=0; unsigned long int CumulDesCodes=0; unsigned long int DecalageCourant=0; unsigned long int Nombre_de_composantes; int index; unsigned char CodeGenere[NOMBRE_MAXIMAL_DE_CHIFFRES_HEXADECIMAUX]; Nombre_de_composantes=MIN2(sizeof(ListeDesCodes),sizeof(ListeDesMasques)); for (index=Nombre_de_composantes-1 ; index >=0 ; index--) { unsigned long int MasqueCourant=ListeDesMasques[index]; unsigned long int CodeCourant=ListeDesCodes[index]; CumulDesMasques = CumulDesMasques | (MasqueCourant << DecalageCourant); CumulDesCodes = CumulDesCodes | ((CodeCourant & MasqueCourant) << DecalageCourant); DecalageCourant = DecalageCourant + (int)(LOG2(MasqueCourant+1)); } sprintf(CodeGenere ,"%0*lX;" ,MAX2(NOMBRE_MINIMAL_DE_CHIFFRES_HEXADECIMAUX,((int)(LOG2(CumulDesMasques+1))/NHXOC)) ,CumulDesCodes ); printf("%s\n",CodeGenere); }