J'ai retravaillé le code pour qu'il soit « plus clair », et j'ai minimisé l'information « arbitraire » pour ne plus avoir que la taille des codes pour chaque octet. Le résultat est également donné sous forme de tableau plutôt que des variables a à f, où les octets sont à lire de i à 0. Ce qui donne :
unsigned int bits = hexa;
unsigned char code_size[] = [7, 4, 5, 5, 5, 5];
unsigned char result[] = [0, 0, 0, 0, 0, 0];
size_t i = 0;
for (unsigned int total_code_size = 1<<code_size[0];
hexa >= total_code_size;
i++, total_code_size <<= code_size[i]) {
result[i] |= 0x80; // utile seulement à la première itération
result[i+1] = (result[i]>>1) | 0x80;
result[i] |= bits & 0x3f;
bits >>= 6;
}
result[i] |= bits;
Ça doit sûrement paraître uxamifiant à certains, et ce code n'a pas été testé, mais je pense qu'il est bon (aux casts près, je me rends compte en relisant). Ça n'est pas le top niveau lisibilité, mais niveau quantité d'information donnée et calculée ça doit s'approcher du minimum.
[^] # Re: Meilleur traduction vers l'utf8
Posté par benoar . En réponse au journal Jouons avec Unicode: Tchars, un Dchars pour Troff. Évalué à 1.
J'ai retravaillé le code pour qu'il soit « plus clair », et j'ai minimisé l'information « arbitraire » pour ne plus avoir que la taille des codes pour chaque octet. Le résultat est également donné sous forme de tableau plutôt que des variables
aàf, où les octets sont à lire deià0. Ce qui donne :Ça doit sûrement paraître uxamifiant à certains, et ce code n'a pas été testé, mais je pense qu'il est bon (aux casts près, je me rends compte en relisant). Ça n'est pas le top niveau lisibilité, mais niveau quantité d'information donnée et calculée ça doit s'approcher du minimum.