Concaténer valeur d'un seul tableau en c

Fermé
samuelk1391 Messages postés 44 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 26 janvier 2016 - Modifié par samuelk1391 le 30/03/2012 à 14:54
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 30 mars 2012 à 20:41
Bonjour,

Je suis étudiant et en projet de fin d'année. J'ai besoin de concaténer plusieurs caractère d'un buffer (initialisé en unsigned char Buffer[114]).

J'ai besoin par exemple de concaténer
Buffer[4];Buffer[5];Buffer[6] etc..

Le problème est que je ne dispose pas de beaucoup de librairies car le programme va être mit en place dans un système embarqué. J'ai déjà pas mal chercher sur internet, notamment via la fonction strcat, mais je ne peux pas par exemple faire :

strcat(Buffer[4],Buffer[5]);

Cela ne fonctionne pas. J'ai voulu transformer ces valeurs en int mais la fonction "atoi" ne fonctionne pas, il transforme toute la chaîne, or je n'ai pas que des chiffres dans cette chaine.

Merci d'avance, cordialement Samuel.



A voir également:

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 mars 2012 à 15:03
Pardon ?
Ce que tu veux faire n'est pas clair, donne un exemple précis de ce que tu as et du résultat que tu veux obtenir.
à mon avis, c'est :
Buffer2[114];
Buffer2[0]='\0';
strcat(Buffer2,Buffer[4]);
strcat(Buffer2,Buffer[5]);
à part que ça ne fonctionne pas avec des caractère. Il faut faire son propre strcart :
void strcat(char* a,char b)
{
  int i=0;
  while(a[i]) i++;
  a[i]=b;
  a[i+1]='\0';
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
30 mars 2012 à 15:07
Bonjour,

Attention, Buffer[i] est un char. Tu ne peux donc pas concaténer deux char pour mettre dans Buffer[i]. De plus strcat sert à concaténer des chaînes, pas des caractères.
Il faut utiliser un buffer suffisamment grand pour contenir la chaîne.
Par exemple : char bufferFinal[10];
Et ensuite :
bufferFinal[0]=Buffer[1];
bufferFinal[1]=Buffer[3];
bufferFinal[2]=Buffer[5];
...
bufferFinal[5]=0; /*très important que la chaîne se finisse par '\0'*/

puts(bufferFinal); /*cela affichera bufferFinal*/
0
samuelk1391 Messages postés 44 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 26 janvier 2016
30 mars 2012 à 15:21
Pour être plus précis, j'ai un tableau contenant des chiffres, par exemple :

Buffer[X]="12300045\0"; (J'ai une partie de code qui va supprimer les éléments qui ne sont pas des chiffes)

Et j'ai besoin de récupérer juste la valeur 3000, et de la transformer en entier.

Concaténer n'est peut être pas le bon terme, étant donner que Buffer est déjà une chaine, et que les caractères sont déjà concaténer à l'intérieur.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
30 mars 2012 à 15:31
Et c'est quoi la règle de récupération du nombre dans le Buffer ? Comment savoir si c'est 3000 et non 123 ? Il s'agit toujours du nombre de 4 chiffres démarrant à la position n°3 ?

Cdlt,
0
samuelk1391 Messages postés 44 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 26 janvier 2016
30 mars 2012 à 15:37
Oui, je vais vous donnée le format d'une ligne :
14/12/1008:01:22;2,000;1,148;1,412;1,959;1,461;1,906;1,314

Les caractères en gras sont ceux que j'ai besoin de récupérer, mais sans les virgules.
J'arrive a la transformer dans un autre buffer en :

1412100801222000114814121959146119061314

Et j'aimerai juste récupérer les valeurs en gras afin de les convertir en int. J'aurai donc au final 8 entier à 4 chiffres, et ils sont toujours à la même place dans la ligne.

Merci pour votre attention à ce sujet :)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
30 mars 2012 à 16:33
Pour récupérer les chiffres en gras :
char BufferFinal[29];
strncpy(BufferFinal, Buffer+12,28);
Je ne comprends pas cette histoire de 8 entiers à 4 chiffres.
0
samuelk1391 Messages postés 44 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 26 janvier 2016
30 mars 2012 à 16:38
Une fois que j'ai récupérer ces résultats, je veux les convertir en entier pour pouvoir utiliser une fonction qui ne gère que les entiers, et il y a 8 valeurs en gras dont j'ai besoin, elle sont séparées par des ";". Les premiers caractères étant la date et l'heure, ensuite nous avons en faites 8 données séparées par des ";", c'est pour cela que je parle de 8 entiers à 4 chiffres, ces valeurs seront forcément de la forme "XXXX" où X en un chiffre (on supprime également la virgule).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
30 mars 2012 à 16:43
Beh je compte que 7 chiffres en gras. C'est quoi le 8ème ?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 mars 2012 à 16:48
Si c'est aussi simple que ça, un strncat http://pwet.fr/man/linux/fonctions_bibliotheques/posix/strncat/ avec une boucle et un ponteur de chaine devraient faire l'affaire :
char* buffer=Buffer;
buffer+=offset;// faire pointé buffer sur le premier caractère à récupérer
strncat(BufferFinal,buffer,4);
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
30 mars 2012 à 17:59
strncpy me paraît plus adéquat.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 mars 2012 à 20:41
pas faux
0