conversion int vers byte

Bonjour,

Je voudrais convertir une ip vers un tableau de byte.

J'ai utiliser ce code :
sscanf(s[t], "%d.%d.%d.%d", srv[0],srv[1],srv[2],srv[3]);

Seulement, je me retrouve avec des int, et srv est de type byte.

Quelqu'un peu m'aider svp ?

Merci :slight_smile:

Salut,

vohu:
J'ai utiliser ce code :
sscanf(s[t], "%d.%d.%d.%d", srv[0],srv[1],srv[2],srv[3]);

Seulement, je me retrouve avec des int, et srv est de type byte.

Essaye %u à la place de %d, %u permet de travailler avec des nombres non signé.
Ou essaye %02X mais je garanti rien.

Sinon tu fait un tableau de int classique puis tu affecte les valeurs dans ton tableau srv[] :wink:

ok, pb résolu, mais en fait, avec &srv[x] dans sscanf() ça fonctionne mieux :open_mouth:

Si non, grosse question...

Dans la librairie ethernet, il y a un type IPAddress ?

Je ne comprends pas trop comment ça fonctionne (je fais que du C)

Normalement, on l'utilise comme ça :
IPAddress srv(192,168,1,1); //par exemple

Mais... comment je relis cette adresse ? comment la modifier si je voulais la changer en cours d'execution ?

je concois bien qu'il y a un constructeur. mais je suis déjà surpris de pas voir un code de la forme :
IPAddress srv = new IPAddress(192,168,1,1);

Merci

vohu:
ok, pb résolu, mais en fait, avec &srv[x] dans sscanf() ça fonctionne mieux :open_mouth:

J'avais mĂȘme pas fait gaffe ... /facepalm
L'erreur saute aux yeux pourtant ... désolé :blush:

vohu:
Normalement, on l'utilise comme ça :
IPAddress srv(192,168,1,1); //par exemple

Mais... comment je relis cette adresse ? comment la modifier si je voulais la changer en cours d'execution ?

Il me semble que la classe IPAddress surcharge l'opérateur [], tu doit donc pouvoir faire srv[0] = 42 par exemple.

Par contre si c'est pour ton sscanf il te faudra d'abord stocker les valeurs dans des variables temporaires puis appeler srv[index] = ma_var1;
En réalité srv[index] appelle la fonction operator[](int index) de la classe IPAddress, ce n'est donc pas un tableau.

vohu:
je concois bien qu'il y a un constructeur. mais je suis déjà surpris de pas voir un code de la forme :
IPAddress srv = new IPAddress(192,168,1,1);

La forme avec new est une allocation dynamique.
Si tu alloue un objet statique (-> qui n'as pas besoin d'ĂȘtre crĂ©e au moment l'exĂ©cution, pour faire des tableaux de taille variable par exemple) tu utilise la forme : type nom(arguments); qui crĂ©e un objet "normal" qui sera dĂ©truit tout seul en fin de fonction / bloc.

ok ok :slight_smile: Merci

Attention, sscanf() attend des pointeurs sur entier (donc 2 octets).
Si tu utilise un tableau de byte, tu va forcément écrire en dehors du tableau.

2 solutions :

  • Propre : utiliser des int (ou unsigned int) avec sscanf puis recopier dans des byte
  • Bricole : utiliser un tableau de 5 byte dont le dernier ne sert qu'Ă  se protĂ©ger des dĂ©bordements

Merci, j'ai corrigé aussi :slight_smile: