/*************************************************************************************************************************************/
/* */
/* 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);
}
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.