comment concaténer 2 entiers

comment concaténer 2 entiers - C - Programmation

Marsh Posté le 21-02-2005 à 20:33:52    

Voilà, j ai deux entiers non signés de 16 bits et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas.
 
Merci
 
edit : double


Message édité par boom le 21-02-2005 à 22:17:01
Reply

Marsh Posté le 21-02-2005 à 20:33:52   

Reply

Marsh Posté le 21-02-2005 à 20:37:15    

boom a écrit :

Voilà, j ai deux entiers non signés de type double et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas.
 
Merci


 

Code :
  1. void main()
  2. {
  3. double a;
  4. double b;
  5. double c;
  6. char nombre[100];
  7. char tmp[100];
  8. //initialisation
  9. sprintf(nombre,"%d",a);
  10. sprintf(tmp,"%d",b);
  11. strcat(a,b);
  12. }


 
si tu veux encore passé tout ça dans un double, cherche l'équivalent de char to int (atoi) en char to double...
 

Reply

Marsh Posté le 21-02-2005 à 21:00:03    

boom a écrit :

Voilà, j ai deux entiers non signés de type double et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas.


Pour des valeurs numériques, ça n'a pas de sens. Si il s'agit de chaines de caractères représentants des nombres, il faut préciser le format (décimal, héxa, nb de 0 en tête etc.). Je pense que tu as un problème de conception...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-02-2005 à 21:09:50    

Emmanuel Delahaye a écrit :

Pour des valeurs numériques, ça n'a pas de sens. Si il s'agit de chaines de caractères représentants des nombres, il faut préciser le format (décimal, héxa, nb de 0 en tête etc.). Je pense que tu as un problème de conception...


 
Pourquoi ça na pas de sens ?
 
Bon, je ne suis pas un programmeur, mais là je dois modifier un truc déjà existant, j'avais essayé avec l'opérateur ##, mais ça ne marche pas.
 
Voici le bout de code :
 

Code :
  1. if ((jffs2sb_magic->magic ## jffs2sb_magic->nodetype) == 19852003) {
  2.  printk(KERN_NOTICE
  3.         "RAMDISK: jffs2 filesystem found at block %d\n",
  4.         start_block);
  5.  nblocks = (jffs2sb->flash_size+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
  6.  goto done;
  7. }

Reply

Marsh Posté le 21-02-2005 à 21:13:57    

# sprintf(nombre,"%d",a);
# sprintf(tmp,"%d",b);
# strcat(a,b);
 
 
mouaahahahh

Reply

Marsh Posté le 21-02-2005 à 21:58:30    

Je pense que les opérateurs de multiplication et d'addition seront plus appropriés que l'utilisation du préprocesseur :D

Reply

Marsh Posté le 21-02-2005 à 21:59:47    

Taz a écrit :

# sprintf(nombre,"%d",a);
# sprintf(tmp,"%d",b);
# strcat(a,b);
 
 
mouaahahahh


 
jusqu a maintenant il n  y a que lui qui ait répondu de manière constructive, bien que ce ne soit pas un code très beau.
 
Mais franchement, il existe pas une fonction qui lirait bit à bit ou octet à octet à une adresse pour la copier dans une zone mémoire, et répéter cette opération avec l autre variable.

Reply

Marsh Posté le 21-02-2005 à 22:00:32    

boom a écrit :

Voilà, j ai deux entiers non signés de type double et j aimerais les mettre bout à bout, il doit surement y avoir une fonction qui fait cela, mais je ne la connais pas.
 
Merci


 
Je ne crois pas.

Reply

Marsh Posté le 21-02-2005 à 22:03:15    

printf a écrit :

Je ne crois pas.


 
cest quoi ça alors ?
 
__u16 magic;

Reply

Marsh Posté le 21-02-2005 à 22:06:20    

Mais c'est parce qu'il est magique que c'est un entier flottant [:ddr555]
 
Pour information, double est le type du langage C qui permet de représenter les nombres réels.
 
Ton truc c'est juste un entier non signé de 16 bits.


Message édité par printf le 21-02-2005 à 22:08:12
Reply

Marsh Posté le 21-02-2005 à 22:06:20   

Reply

Marsh Posté le 21-02-2005 à 22:09:14    

moi23372 a écrit :

Code :
  1. void main()
  2. {
  3. double a;
  4. double b;
  5. double c;
  6. char nombre[100];
  7. char tmp[100];
  8. //initialisation
  9. sprintf(nombre,"%d",a);
  10. sprintf(tmp,"%d",b);
  11. strcat(a,b);
  12. }


 
 
si tu veux encore passé tout ça dans un double, cherche l'équivalent de char to int (atoi) en char to double...


 
j'aurais voulu faire plus compliqué et plus bugueux, j'aurais pas reussi


Message édité par chrisbk le 21-02-2005 à 22:09:34
Reply

Marsh Posté le 21-02-2005 à 22:10:40    

chrisbk a écrit :

j'aurais voulu faire plus compliqué et plus bugueux, j'aurais pas reussi


 
T'as même buggé ton reply mon salaud :o

Reply

Marsh Posté le 21-02-2005 à 22:13:01    

c'est son code satanique qui m'a dit de faire ca [:petrus75]

Reply

Marsh Posté le 21-02-2005 à 22:14:46    

Hum, pour les mettres bout à bout, faudrait pas genre récupérer le nombre de digit du premier, puis faire deuxième *  10^(nbr digit) + premier ?

Reply

Marsh Posté le 21-02-2005 à 22:15:57    

printf a écrit :

Mais c'est parce qu'il est magique que c'est un entier flottant [:ddr555]
 
Pour information, double est le type du langage C qui permet de représenter les nombres réels.
 
Ton truc c'est juste un entier non signé de 16 bits.


 
ok merci, mes notions en C sont plutot vagues.  :)  
 
Mais sinon pour ma question ça ne mavance pas des masses

Reply

Marsh Posté le 21-02-2005 à 22:18:48    

[citation=989292,0,14,208403]Hum, pour les mettres bout à bout, faudrait pas genre récupérer le nombre de digit du premier, puis faire deuxième *  10^(nbr digit) + premier ?[/citation]
 
 
Ah ouais, pas con !
 
j y avais pas du tout pensé, merci bien.  :)

Reply

Marsh Posté le 21-02-2005 à 22:20:24    

[citation=989292,0,14,208403]Hum, pour les mettres bout à bout, faudrait pas genre récupérer le nombre de digit du premier, puis faire deuxième *  10^(nbr digit) + premier ?[/citation]
 
Ouais.
Ou sinon il peut comparer individuellement les champs de la structure [:dawa]

Reply

Marsh Posté le 21-02-2005 à 22:27:49    

on peut utiliser les décalages aussi :o
 
genre uint32 = uint16_1 << 16 + uint16_2
 
non?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-02-2005 à 22:28:38    

Ca risque pas de mettre des 0 entre les deux ?

Reply

Marsh Posté le 21-02-2005 à 22:29:44    

[citation=989309,0,19,208403]Ca risque pas de mettre des 0 entre les deux ?[/citation]
Uniquement ceux qui existaient déjà [:spamafote]  
 
Après c'est peut être pas ce qu'il veut, mais ça les met bout à bout :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-02-2005 à 22:32:26    

Effectivement :)

Reply

Marsh Posté le 21-02-2005 à 23:02:53    

[citation=989307,0,18,144132]on peut utiliser les décalages aussi :o
 
genre uint32 = uint16_1 << 16 + uint16_2
 
non?[/citation]
 
Y'a rien qui te choque ? :D
 
(sans compter que les bases c'est comme les choux et les carottes, ça ne se mélange que dans une salade composée)


Message édité par printf le 21-02-2005 à 23:03:33
Reply

Marsh Posté le 21-02-2005 à 23:16:02    

0\/\/n3d By P41ntf

Reply

Marsh Posté le 21-02-2005 à 23:16:11    

[citation=989326,0,22,95059]Y'a rien qui te choque ? :D
 
(sans compter que les bases c'est comme les choux et les carottes, ça ne se mélange que dans une salade composée)[/citation]
ben non, on décale notre int16 de 16 bits [:spamafote]
Si tu décales de 15 bits tu va avoir un léger problème [:spamafote]  
(et je vois pas où on a un mélange de bases)


Message édité par masklinn le 21-02-2005 à 23:17:41

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-02-2005 à 23:16:53    

autrement dit y'a pu rien dedans

Reply

Marsh Posté le 21-02-2005 à 23:18:41    

ah bon ? et c'est quoi le type de '16' ?

Reply

Marsh Posté le 21-02-2005 à 23:19:18    

string [:god]

Reply

Marsh Posté le 21-02-2005 à 23:19:22    

[citation=989332,0,25,9187]autrement dit y'a pu rien dedans[/citation]
 [:gratgrat]  
 
Ah oui ptet ben qu'il faudrait commencer par le coller dans un int32 [:ddr555]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-02-2005 à 23:22:14    

[citation=989337,0,27,9187]string [:god][/citation]
nan sérieusement
 
(d'ailleurs ça eut plutôt été une caractère multioctets)


Message édité par Taz le 21-02-2005 à 23:22:45
Reply

Marsh Posté le 21-02-2005 à 23:23:52    

y se trouve que point ta question ne comprends
pour moins un uint_16 est codé sur 16bits [:petrus75]

Reply

Marsh Posté le 21-02-2005 à 23:23:55    

[citation=989307,0,18,144132]on peut utiliser les décalages aussi :o
 
genre uint32 = (uint16_1 << 16 )+ uint16_2
 
non?[/citation]
[:maitre drasche]
mais c'est tjrs faux [:petrus75]


Message édité par schnapsmann le 21-02-2005 à 23:24:25
Reply

Marsh Posté le 21-02-2005 à 23:24:53    

[citation=989345,0,31,44667][:maitre drasche][/citation]
deja ca aide rien niveau taille du biniou, pis quitte  a bien faire on fait un '|' plutot qu'un '+', ca reflete mieux l'idée [:petrus75]

Reply

Marsh Posté le 21-02-2005 à 23:25:13    

dans l'expression "uint16_1 << 16"
 
quel est le type de l'opérande droite 16 ?

Reply

Marsh Posté le 21-02-2005 à 23:27:12    

[citation=989347,0,33,72553]
quel est le type de l'opérande droite 16 ?[/citation]
tu veux mon poing dans la gueule? [:petrus75]

Reply

Marsh Posté le 21-02-2005 à 23:32:19    

d'ailleurs, Emmanuel me corrigera (je sors pas le bouquin), c'est même pas une histoire de type d'opérandes, je dirais que  de toutes façons les opérandes de types char ou short sont convertis en int avant d'appliqué la promotion.

Reply

Marsh Posté le 21-02-2005 à 23:33:06    

[citation=989347,20,13,72553]dans l'expression "uint16_1 << 16"
 
quel est le type de l'opérande droite 16 ?[/citation]
 
int.
 
Question subsidiaire : quelle est la taille d'un int sur l'architecture cible [:petrus75]

Reply

Marsh Posté le 21-02-2005 à 23:34:32    

damned [:petrus75]

Reply

Marsh Posté le 21-02-2005 à 23:38:25    

De toutes façons c'est même pas la peine de se prendre le chou, puisque l'expression est mathématiquement fausse [:spamafote]

Reply

Marsh Posté le 21-02-2005 à 23:40:58    

pourquoi ? (j'ai pas lu le reste)

Reply

Marsh Posté le 21-02-2005 à 23:41:53    

[citation=989365,0,38,95059]De toutes façons c'est même pas la peine de se prendre le chou, puisque l'expression est mathématiquement fausse [:spamafote][/citation]
non  :o  
0<=a<2^16
0<=b<2^16
(a<<16)+b=a*2^16+b, c'est bien ce que mascouilles voulait faire non?  :??: (zetes cons on vous le faites exprès? [:petrus75])

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed