passer d'un int a 4 char (representant le nombre) [C/C++] - C - Programmation
Marsh Posté le 30-10-2003 à 07:49:27
int i = 1234;
char cTmp[4];
sprintf(cTmp, "%d", i);
Marsh Posté le 30-10-2003 à 08:02:21
ce serait plutot:
Code :
|
non?
Marsh Posté le 30-10-2003 à 08:16:23
"%d", i tout court, étourdi que je suis:d... pas réveillé...
Marsh Posté le 30-10-2003 à 09:51:47
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.
Marsh Posté le 30-10-2003 à 11:55:09
l'auteur voulait plutot un truc de ce style nan ?
(mettre un int "sous forme binaire", cad dans un char[4])
Code :
|
sinon je vois pas pkoi il parle de décalages au début...
Marsh Posté le 30-10-2003 à 12:02:02
ou encore :
Code :
|
et t'as ton résultat dans o.c[]
Mais ça dépendra de l'architecture sur laquelle tu travailles.
Marsh Posté le 30-10-2003 à 17:09:23
Konar a écrit : l'auteur voulait plutot un truc de ce style nan ?
|
merci bien
Marsh Posté le 30-10-2003 à 23:19:44
tiens voila une version plus mieux (au cas ou tes int sont pas sur 32 bits) :
Code :
|
Marsh Posté le 30-10-2003 à 23:20:34
Konar a écrit : tiens voila une version plus mieux (au cas ou tes int sont pas sur 32 bits) :
|
ouais bon jlavais deja modifié
Marsh Posté le 30-10-2003 à 23:24:27
Konar a écrit : tiens voila une version plus mieux (au cas ou tes int sont pas sur 32 bits) :
|
Attention, sizeof(char) n'est pas forcement 1 !
Marsh Posté le 30-10-2003 à 23:28:22
Kristoph a écrit : |
Code :
|
Marsh Posté le 30-10-2003 à 23:32:52
SchnapsMann a écrit :
|
Marsh Posté le 30-10-2003 à 23:33:46
SchnapsMann a écrit :
|
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.
Marsh Posté le 30-10-2003 à 23:39:21
Kristoph a écrit : |
Si justement, sizeof(char) vaut toujours 1.
Par-contre, ce 1 ne signifie pas toujours 1 octet.
A+
Marsh Posté le 31-10-2003 à 02:03:48
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é ??
Marsh Posté le 31-10-2003 à 02:38:25
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***
Marsh Posté le 31-10-2003 à 15:59:40
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
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
Marsh Posté le 03-11-2003 à 00:28:35
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.
Marsh Posté le 03-11-2003 à 00:37:33
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"
Marsh Posté le 30-10-2003 à 03:33:25
ya un fonction pour faire ca ??? sinon je pensait au decalages.........