On peut faire un peut mieux que répéter les shift & masques dans ta fonction hexatochars() :
unsigned int bits = hexa;
if (hexa >= (1<<26)) {
a |= 1<<2;
f = (bits & 0x3f) | 0x80;
bits >>= 6;
}
if (hexa >= (1<<21)) {
a |= 1<<3;
e = (bits & 0x3f) | 0x80;
bits >>= 6;
}
if (hexa >= (1<<16)) {
a |= 1<<4;
d = (bits & 0x3f) | 0x80;
bits >>= 6;
}
if (hexa >= (1<<11)) {
a |= 1<<5;
c = (bits & 0x3f) | 0x80;
bits >>= 6;
}
if (hexa >= (1<<7)) {
a |= (1<<6) | (1<<7);
b = (bits & 0x3f) | 0x80;
bits >>= 6;
}
a |= bits;
J'ai écrit les constantes différemment car je trouve que ça permet de mieux se rendre compte que les intervalles proposés par ce standard encodent 7, 4, 5, 5, 5 et 5 bits chacun, pour un total 31 bits pour un "code point". En plus, avec le fait qu'on shift toujours de 6 bits, ça m'avait embrouillé sur le calcul, mais en fait ça marche exactement comme ça car chaque octet qui s'ajoute vient rétrécir d'un bit la place qu'on a dans le premier (sauf au premier ajout, où on perd 2 bits car on ne peut pas prendre le préfixe « réservé » 0b10xxxxxx)
# Meilleur traduction vers l'utf8
Posté par benoar . En réponse au journal Jouons avec Unicode: Tchars, un Dchars pour Troff. Évalué à 5.
On peut faire un peut mieux que répéter les shift & masques dans ta fonction
hexatochars():J'ai écrit les constantes différemment car je trouve que ça permet de mieux se rendre compte que les intervalles proposés par ce standard encodent 7, 4, 5, 5, 5 et 5 bits chacun, pour un total 31 bits pour un "code point". En plus, avec le fait qu'on shift toujours de 6 bits, ça m'avait embrouillé sur le calcul, mais en fait ça marche exactement comme ça car chaque octet qui s'ajoute vient rétrécir d'un bit la place qu'on a dans le premier (sauf au premier ajout, où on perd 2 bits car on ne peut pas prendre le préfixe « réservé » 0b10xxxxxx)