Bonjour,
J'ai 4 octets (une adresse ip) dans le type :
unsigned long int s_addr;
Je voudrais le caster en u_char de façon à pouvoir récupérer chaque octet.
Comme faire ?
Merci d'avance,
Version imprimable
Bonjour,
J'ai 4 octets (une adresse ip) dans le type :
unsigned long int s_addr;
Je voudrais le caster en u_char de façon à pouvoir récupérer chaque octet.
Comme faire ?
Merci d'avance,
avec les masques et les décalages.
Code:
1
2
3
4 unsigned char val0 = s_addr & 0xff; unsigned char val1 = (s_addr >> 8) & 0xff; unsigned char val2 = (s_addr >> 16) & 0xff; unsigned char val3 = (s_addr >> 24) & 0xff;
Ou encore : u_char * octets = (u_char *)&s_addr;
Les octets sont octets[0] à octets[3].
Oui j'ai rencontré ce problème de "boutisme" mais qu'est ce que c'est ?
La méthode du & fonctionne bien par contre.
Le boutisme est dû aux différentes architectures de micro processeurs. Certains micro processeurs présentent les octets poid forts en tête, d'autres présentent les octets poid faibles en tête. Si l'on n'y fait pas attention, cela provoque un problème de portabilité courant entre des programmes qui discutent entres eux (au travers du réseau par exemple) avec des architectures différentes (Intel et Sparc par exemple).
On parle de little endian ou big endian, regarde ici pour plus d'info : http://fr.wikipedia.org/wiki/Endianness
Les 2 méthodes fonctionnent (au problème de boutisme près), peut être que celle de Melem est un peu plus rapide.