Méthode de compression : cast sensible
Bonsoir,
Alors voilà je devais mettre au point une méthode de compression pour les nombres entiers positifs. Au lieu d'écrire un petit int sur 4 octets, mieux vaut l'écrire sur le nombre de bits adéquats. Bon l'algorithme fonctionne bien.
L'algorithme est performant pour des petits nombres, en gros sur chaque octet 7 bits servent à code le nombre et le dernier dit si la lecture continue ou non.
Le problème c'est lorsque je veux caster un int en (unsigned char), plus rien ne fonctionne normalement et la solution revient à ne rien caster du tout, et on laisse le car tronquer de lui même en gros.
Je vous montre le bout de code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| void
ecrire_entier(void* fichier, unsigned int nombre)
{
static unsigned char tableau[NB_OCTETS];
unsigned char tmp;
int i;
int c = 0;
for (i = NB_OCTETS - 1; i >= 0; i--)
{
tmp = ((nombre & ((1 << 7) - 1) << 7 * i)) >> 7 * i;
if (tmp > 0 || c > 0 || i == 0)
{
if (i > 0)
{
BIT_A_1(tmp, 7);
}
tableau[c] = tmp;
c++;
}
}
fwrite(tableau, sizeof(char), c, fichier);
} |
Le castage se situe au niveau de l'affectation de la variable tmp, quelqu'un sait pourquoi le fait de caster en unsigned char ou en char fausse tout le résultat ? (ici je l'ai enlevé et ça fonctionne très bien maintenant). Y a t-il une subtilité du langage ?
Merci à vous.
Bye.