/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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
                 ,"&#x%0*lX;"
                 ,MAX2(NOMBRE_MINIMAL_DE_CHIFFRES_HEXADECIMAUX,((int)(LOG2(CumulDesMasques+1))/NHXOC))
                 ,CumulDesCodes
                  );

          printf("%s\n",CodeGenere);
          }



Copyright © Jean-François COLONNA, 2025-2025.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2025-2025.