OVH Cloud OVH Cloud

Conversion unsigned char en int ?

7 réponses
Avatar
philippe.louboutin
Bonjour,

Voilà mon pb est le suivant : je récupère dans une structure sockaddr
(variable sh) l'adresse IP d'un client sous la forme A.B.C.D, j'ai
alors sh.sa_data[2]=A, sh.sa_data[3]=B...

Le pb, c'est que A,B,C et D sont des unsigned char, donc si je veux
afficher leur valeur, ça marche bien entre 0 et 127, mais au-delà, ça
n'affiche pas bien...

J'ai bien essayé de convertir en int, mais ça ne marche pas...

Comment faire pour convertir un unsigned char en int ???? J'ai beau
chercher sur les forums je ne trouve rien... Quelqu'un peut-il/elle
m'aider ?

Merci beaucoup

Phil

7 réponses

Avatar
Yves ROMAN

Bonjour,

Voilà mon pb est le suivant : je récupère dans une structure sockaddr
(variable sh) l'adresse IP d'un client sous la forme A.B.C.D, j'ai
alors sh.sa_data[2]=A, sh.sa_data[3]=B...

Le pb, c'est que A,B,C et D sont des unsigned char, donc si je veux
afficher leur valeur, ça marche bien entre 0 et 127, mais au-delà, ça
n'affiche pas bien...

En fait, dans la structure, ce sont des char (entre -128 et 127)

struct sockaddr {
u_short sa_family; /* address family */
char sa_data[14]; /* up to 14 bytes of direct address */
};
Tu veux les convertir en unsigned char : il suffit de caster
printf("%u.%u.%u.%u",(unsigned char)sh.sa_data[2],...

Nota: il existe struct sockaddr_in pour faire plus facilement (?!) ce que tu
veux.
struct sockaddr_in * pshin = (sockaddr_in *)&sh ;
printf("%u.%u.%u.%u",pshin->sin_addr.S_un.S_un_b.s_b1, ...

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Yves ROMAN wrote:

printf("%u.%u.%u.%u",(unsigned char)sh.sa_data[2],...


printf("%u.%u.%u.%u",(unsigned int)sh.sa_data[2],...

"%u" veut du 'unsigned int'.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', (Philippe) wrote:

Bonjour,

Voilà mon pb est le suivant : je récupère dans une structure sockaddr
(variable sh) l'adresse IP d'un client sous la forme A.B.C.D, j'ai
alors sh.sa_data[2]=A, sh.sa_data[3]=B...

Le pb, c'est que A,B,C et D sont des unsigned char, donc si je veux
afficher leur valeur, ça marche bien entre 0 et 127, mais au-delà, ça
n'affiche pas bien...

J'ai bien essayé de convertir en int, mais ça ne marche pas...


Ce n'est pas en int qu'il faut convertir, mais en unsigned int:

unsigned char x = 234;

printf ("x = %un", (unsigned) x);

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
philippe.louboutin
Merci m'sieur !
Avatar
philippe.louboutin
Yves a écrit:

Tu veux les convertir en unsigned char : il suffit de caster
printf("%u.%u.%u.%u",(unsigned char)sh.sa_data[2],...


Désolé j'avais mal posé ma question...
En fait mon but c'est de récupérer l'@ IP du client sur le serveur (ce
qui est fait avec la variable sh). Cependant, cette adresse est
découpée en 4 parties : A,B,C et D, alors que moi je voudrais
récupérer cette adresse IP dans un tableau de charactères (char IP[20]
par exemple) afin de pouvoir faire un fopen avec (ouvrir un fichier du
genre 11.256.23.158 par exemple). Est-ce que c'est possible ou pas ?
Si oui, de quelle manière dois-je m'y prendre ?

Merci pour vos réponses et @+

Avatar
Olivier Roset
Philippe wrote:

Yves a écrit:


Tu veux les convertir en unsigned char : il suffit de caster
printf("%u.%u.%u.%u",(unsigned char)sh.sa_data[2],...



Désolé j'avais mal posé ma question...
En fait mon but c'est de récupérer l'@ IP du client sur le serveur (ce
qui est fait avec la variable sh). Cependant, cette adresse est
découpée en 4 parties : A,B,C et D, alors que moi je voudrais
récupérer cette adresse IP dans un tableau de charactères (char IP[20]
par exemple) afin de pouvoir faire un fopen avec (ouvrir un fichier du
genre 11.256.23.158 par exemple). Est-ce que c'est possible ou pas ?
Si oui, de quelle manière dois-je m'y prendre ?


Effectivement, ca n'est plus le même problème.
Consulte la documentation de la fonction sprintf.



Merci pour vos réponses et @+


De rien.


Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', (Philippe) wrote:

En fait mon but c'est de récupérer l'@ IP du client sur le serveur (ce
qui est fait avec la variable sh). Cependant, cette adresse est
découpée en 4 parties : A,B,C et D, alors que moi je voudrais
récupérer cette adresse IP dans un tableau de charactères (char IP[20]
par exemple) afin de pouvoir faire un fopen avec (ouvrir un fichier du
genre 11.256.23.158 par exemple). Est-ce que c'est possible ou pas ?
Si oui, de quelle manière dois-je m'y prendre ?


sprintf() ou snprintf() si tu as C99 avec les formatteurs déjà indiqués...

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/