Concaténation des caractères non signés

Concaténation des caractères non signés - C++ - Programmation

Marsh Posté le 22-04-2011 à 21:17:54    

Bonjour,
 
Je cherche un petit programme en C++ qui envoi et reçoit des trames à partir d’une interface Ethernet (soit à l’aide de winpcap ou autre). Svp si quelqu’un dispose d’un code source qui peut m’aider pour gagner du temps et mieux avancer car je suis débutante en C++ et j’ai vraiment besoin de cette partie de programmation afin d’accomplir un autre travail.  
 
Sinon j’essaye entre temps, de coder toute seule en utilisant visual C++ 2010. Mais j’ai encore un petit problème car en codant la couche transport j’ai besoin de construire un paquet UDP donc je dois concaténer l’entête UDP avec le message que je souhaite envoyer.
 
j’ai pensé à la fonction strcat(chaine1,chaine2) mais ça n’était pas la solution vu que mes variables sont de type caractère non signé et cette fonction permet seulement de concaténer les chaines de caractère signé. Alors j’ai pensé à les mettre dans une structure comme suit
 
struct packetUDP          
{  
    unsigned short UDPportSrc;
    unsigned short UDPportDest;
    unsigned short UDPlength;
    unsigned short UDPchecksum;
    unsigned char Message[500];
};
 
Est-ce que c’est la bonne solution svp? Sinon comment je fais. Parce que j’ai pensé aussi à la fonction  
 
void * memcpy ( void * destination, const void * source, size_t num );
 
ma question peut être débile :( mais J’ai vraiment besoin de votre aide svp. merci pour votre temps.
 

Reply

Marsh Posté le 22-04-2011 à 21:17:54   

Reply

Marsh Posté le 22-04-2011 à 22:20:44    

strcat, que les caractères soient signés ou pas, c'est pas trop son problème en fait. strcat se contente de recopier des octets, jusqu’à ce qu'il rencontre un 0, sans se préoccuper de la valeur des dits octets ni de leur interprétation comme des données signées ou non. Si le compilo fait des siennes, il suffit de caster:

Code :
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4. void main ()
  5. {
  6.     unsigned char a[9] = "toto";
  7.     unsigned char b[5] = "tutu";
  8.     strcat((char *)a, (char *)b);
  9.     cout << a;
  10. }


A+,


Message édité par gilou le 22-04-2011 à 22:25:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-04-2011 à 23:29:04    

merci bcp Gilou,ça marche parfaitement. mais vu que j'essaye de concaténer plusieurs éléments afin de construire un paquet UDP, j'ai crée la structure structure suivante:
 
struct enteteUDP
{  
   unsigned short UDPportSrc;
   unsigned short UDPportDest;
   unsigned short UDPlength;
   unsigned short UDPchecksum;
   unsigned char Message[500];
};
 puis j'ai fait comme suit:
strcat(struct EnteteUDP,char *Message);
 
la génération était réussite!! la fonction strcat n'était pas pour concaténer seulemnt des chaines de caractères? la structure est considérée comme chaine de caractères?
désolée si c un peu bête mais je suis entrain d'essayer de comprendre de plus en plus le C++

Reply

Sujets relatifs:

Leave a Replay

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