Convertir un unsigned long en char[4]

Pour sauvegarder dans un fichier des chaînes de caractères ayant des tailles différentes, je devais trouver un moyen d’enregistrer juste avant la taille de cette chaîne.

La solution était donc d’écrire cette taille de type unsigned long sous forme d’un tableau de bits de 4 octets.

//Encodage d'un unsigned long sur 4 octets
void EncodeULong(unsigned long size, char *data)
{
    data[0] = ((size >> 24) & 0xFF);
    data[1] = ((size >> 16) & 0xFF);
    data[2] = ((size >> 8) & 0xFF);
    data[3] = (size & 0xFF);
}

Et voici dans le sens inverse la fonction permet de retrouver un unsigned long à partir tableau de char*.

//Decodage d'un unsigned long ecrit sur 4 octets
unsigned long DecodeULong(const char a, const char b, const char c, const char d)
{
    return (unsigned char)a*(1<<24) + (unsigned char)b*(1<<16) + (unsigned char)c*(1<<8) + (unsigned char)d*(1<<0);
}

A garder dans sa mallette du petit développeur !

Laisser un commentaire