Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2467 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C/C++] passer d'un int a 4 char (representant le nombre)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] passer d'un int a 4 char (representant le nombre)

n°554122
red factio​n
Posté le 30-10-2003 à 03:33:25  profilanswer
 

ya un fonction pour faire ca ??? sinon je pensait au decalages.........
 
 

mood
Publicité
Posté le 30-10-2003 à 03:33:25  profilanswer
 

n°554126
matafan
Posté le 30-10-2003 à 05:23:25  profilanswer
 

Reformule STP.

n°554133
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 30-10-2003 à 07:49:27  profilanswer
 

int i = 1234;
char cTmp[4];
 
sprintf(cTmp, "%d", i);


Message édité par fodger le 30-10-2003 à 08:16:38
n°554137
torpe23
Posté le 30-10-2003 à 08:02:21  profilanswer
 

ce serait plutot:

Code :
  1. int i = 1234;
  2. char cTmp[4];
  3. sprintf(cTmp, "%4d", i);


 
non?

n°554142
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 30-10-2003 à 08:16:23  profilanswer
 

"%d", i tout court, étourdi que je suis:d... pas réveillé...


Message édité par fodger le 30-10-2003 à 08:17:05
n°554223
Kristoph
Posté le 30-10-2003 à 09:51:47  profilanswer
 

Ca vous dirait d'allouer un tableau de taille suffisante ? Vous avez oublié le '\0' terrminal là.
 
Et puis utilisez snprintf si possible, il y a assez de buffer overflow dans la nature comme ça, pas la peine d'en ajouter d'autres.


Message édité par Kristoph le 30-10-2003 à 09:51:57
n°554369
Konar
Posté le 30-10-2003 à 11:55:09  profilanswer
 

l'auteur voulait plutot un truc de ce style nan ?
(mettre un int "sous forme binaire", cad dans un char[4])
 

Code :
  1. int nb = 12;
  2. char str[4];
  3. memcpy(str, &nb, 4 * sizeof (char));


 
sinon je vois pas pkoi il parle de décalages au début...

n°554380
leneuf22
Posté le 30-10-2003 à 12:02:02  profilanswer
 

ou encore :
 

Code :
  1. typedef union {
  2. int n;
  3. char c[4];
  4. } montype;
  5. montype o;
  6. int x = ...;
  7. o.n = x;


et t'as ton résultat dans o.c[]
 
Mais ça dépendra de l'architecture sur laquelle tu travailles.

n°554735
red factio​n
Posté le 30-10-2003 à 17:09:23  profilanswer
 

Konar a écrit :

l'auteur voulait plutot un truc de ce style nan ?
(mettre un int "sous forme binaire", cad dans un char[4])
 

Code :
  1. int nb = 12;
  2. char str[4];
  3. memcpy(str, &nb, 4 * sizeof (char));


 
sinon je vois pas pkoi il parle de décalages au début...


 
 :jap: merci bien

n°555054
Konar
Posté le 30-10-2003 à 23:19:44  profilanswer
 

tiens voila une version plus mieux (au cas ou tes int sont pas sur 32 bits) :
 

Code :
  1. int nb = 12;
  2. char str[sizeof (int)];
  3. memcpy(str, &nb, sizeof (int));

mood
Publicité
Posté le 30-10-2003 à 23:19:44  profilanswer
 

n°555055
red factio​n
Posté le 30-10-2003 à 23:20:34  profilanswer
 

Konar a écrit :

tiens voila une version plus mieux (au cas ou tes int sont pas sur 32 bits) :
 

Code :
  1. int nb = 12;
  2. char str[sizeof (int)];
  3. memcpy(str, &nb, sizeof (int));




 :love:  
 
 
 [:yamusha]  
ouais bon jlavais deja modifié

n°555057
Kristoph
Posté le 30-10-2003 à 23:24:27  profilanswer
 

Konar a écrit :

tiens voila une version plus mieux (au cas ou tes int sont pas sur 32 bits) :
 

Code :
  1. int nb = 12;
  2. char str[sizeof (int)];
  3. memcpy(str, &nb, sizeof (int));




 
Attention, sizeof(char) n'est pas forcement 1 !

n°555061
schnapsman​n
Zaford Beeblefect
Posté le 30-10-2003 à 23:28:22  profilanswer
 

Kristoph a écrit :


 
Attention, sizeof(char) n'est pas forcement 1 !


 

Code :
  1. int nb = 12;
  2. char str[sizeof(int)/sizeof(char)+(sizeof(int)%sizeof(char)==0?0:1)];
  3. memcpy(str, &nb, sizeof(int)/sizeof(char)+(sizeof(int)%sizeof(char)==0?0:1));


 
[:must]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°555066
red factio​n
Posté le 30-10-2003 à 23:32:52  profilanswer
 

SchnapsMann a écrit :


 

Code :
  1. int nb = 12;
  2. char str[sizeof(int)/sizeof(char)+(sizeof(int)%sizeof(char)==0?0:1)];
  3. memcpy(str, &nb, sizeof(int)/sizeof(char)+(sizeof(int)%sizeof(char)==0?0:1));


 
[:must]


[:al zheimer]

n°555067
Kristoph
Posté le 30-10-2003 à 23:33:46  profilanswer
 

SchnapsMann a écrit :


 

Code :
  1. int nb = 12;
  2. char str[sizeof(int)/sizeof(char)+(sizeof(int)%sizeof(char)==0?0:1)];
  3. memcpy(str, &nb, sizeof(int)/sizeof(char)+(sizeof(int)%sizeof(char)==0?0:1));


 
[:must]


 
C'est pas mal comme ça :)
 
Mais es ce que l'on ne pourrait pas se passer du "?0:1" ? Il me semble que par definition, (x==x) doit renvoyer soit 1 soit 0.

n°555069
Enidan
Posté le 30-10-2003 à 23:39:21  profilanswer
 

Kristoph a écrit :


 
Attention, sizeof(char) n'est pas forcement 1 !


 
Si justement, sizeof(char) vaut toujours 1.
Par-contre, ce 1 ne signifie pas toujours 1 octet.
 
A+

n°555112
red factio​n
Posté le 31-10-2003 à 02:03:48  profilanswer
 

Encore une question :  
 
c du non signe -> 1 sera representé par  
 
01 00 00 00  
 
le prob c que je met ca dans une chaine de caractere donc au 1er caractere zero c fini
 
ya pas moyen de lavoir en signé ??

n°555114
Konar
Posté le 31-10-2003 à 02:38:25  profilanswer
 

tu rates de qqchose : c'est du binaire, donc ouais il peut y avoir des 00 un peu partout, par ex :
l'int "185270283" donne en binaire "11 00 11 11"
 
faut pas penser comme une chaine de caractere genre texte, mais plutot a une représentation d'octets de 0x00 a 0xFF, donc eviter les strlen et autres str***

n°555603
bugsan
Posté le 31-10-2003 à 15:59:40  profilanswer
 

Le probleme c'est que sur platforme intel les octets des int32 sont inversé en mémoire.
int x;
char *c;
c=&x;
ca marche pas  :non:  
l'octet de poid faible se retrouve à gauche...
 
char c[4];
for(i=0;i<4;i++) c[i] = ((char *)&x)[3-i];
la tu as ton octet de poid faible à droite :)
 

n°557224
Konar
Posté le 03-11-2003 à 00:28:35  profilanswer
 

c'est pas que 'ca marche pas', mais plutot que suivant les systèmes, le bit de poids faible se retrouve a gauche ou a droite, par ex le nombre 13 s'écrira soit "0D 00 00 00" soit "00 00 00 0D". et je crois bien que j'ai rarement vu la 2nde solution.

n°557227
Kristoph
Posté le 03-11-2003 à 00:37:33  profilanswer
 

Konar a écrit :

c'est pas que 'ca marche pas', mais plutot que suivant les systèmes, le bit de poids faible se retrouve a gauche ou a droite, par ex le nombre 13 s'écrira soit "0D 00 00 00" soit "00 00 00 0D". et je crois bien que j'ai rarement vu la 2nde solution.


 
Je crois même qu'il y a des systèmes qui l'ecrivent comme ça :
 
"00 00 0D 00"

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C/C++] passer d'un int a 4 char (representant le nombre)

 

Sujets relatifs
passer des parametres avec des formulairesproblem de tableau a 2 dim passer en argument dans une fonction
Obtenir le nombre total d'enregistrement d'un fichier mdbstring et char* ?
Comment fait-on pour passer en parametre une fonction à une méthode ?[PHP] Passer une commande système unix en php.
[VB.net] Comment passer un Array String a une fonction sans variable[PHP] Passer un texte avec un '&' comme paramètre
sosutraire à une date un nombre[HTML/JS] Afficher le nombre d'utilisateur connecté sur le site
Plus de sujets relatifs à : [C/C++] passer d'un int a 4 char (representant le nombre)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR