IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comment declarer (definir) un datagramme en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Par défaut Comment declarer (definir) un datagramme en c++
    Bonjour,

    Ca fait un bon bout de temps que je cherche mais j'ai rien trouvé j'espere que j'aurais ma reponse en postant ici.
    Voila ce que je cherche: je programme un client sntp pour qu il fonctionne il faut que j'envoie un paquet definit par une suite de bit au serveur, mon probleme c'est comment créer ce paquet.
    Est ce qu'il existe un type en c/c++ pour definir un bit et l'initialiser à (0 ou 1)?
    Ou bien meme un type de 32bits et l'initialiser avec une valeur hexadecimal?

    j'espere que j'ai été assez clair,
    Merci d'avance,

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    pour ce qui est du bit, les booléens sont normalement à même de les modéliser puisqu'ils ne peuvent prendre que deux valeurs (0/1, true/false, etc...)

    pour les données sur 32bits, tu as les int ou unsigned int, le problème est que selon l'architecture sur laquelle tu travailles, tu ne peux garantir que tu travailles bien sur 32bits... Le mieux est sûrement d'utiliser un tableau de chars, les chars étant toujours codés sur un octet (donc 8bits)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    salut,
    Citation Envoyé par Swoög
    (...)
    pour les données sur 32bits, tu as les int ou unsigned int, le problème est que selon l'architecture sur laquelle tu travailles, tu ne peux garantir que tu travailles bien sur 32bits... Le mieux est sûrement d'utiliser un tableau de chars, les chars étant toujours codés sur un octet (donc 8bits)
    Suite à une explication dans laquelle je mettais qu'un char était codé sur 8 bits, on m'a fait savoir que ce n'était pas forcément vrai, et que, tout ce dont on peut etre sur, c'est que sizeof(char) vaut 1, sizeof(les autres types) renverra une valeur calculée sur cette base...

    Par contre, il me *semble* qu'il existe un type "bit" qui devrait pouvoir faire l'affaire...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    C'est vrai, si on se restreint strictement au standard C et C++, un char a une taille d'un byte, c'est à dire, le nombre minimal de bits nécessaire pour coder tous les caractères utilisés. Mais le plus souvent, c'est un octet, il est très qu'une autre unité soit utilisée...

    Ensuite, si tu veux à tout prix rester totalement conforme au standard, il te faura un tableau de bits (donc de booléens)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Ensuite, si tu veux à tout prix rester totalement conforme au standard, il te faura un tableau de bits (donc de booléens)
    Attention, le booléen indiqué n'est pas celui du langage qui n'est pas codé sur 0 ou 1 !

    Il y a std::bitset

    Sinon travailler avec un tableau d' "unsigned char", et faire du décalage de bit dessus et utiliser la partie intéressante du tableau.

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Par défaut
    Merci beaucoup pour votre réponse,
    je n'ai pas eu la reponse exacte a ce que je voulais, mais beaucoup d'elements tres interessants que je vais etudier et peut etre revenir ici si j'ai plus de question.

    Merci encore une fois,

  7. #7
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par Ti-R
    Attention, le booléen indiqué n'est pas celui du langage qui n'est pas codé sur 0 ou 1 !
    Oui, le type bool n'est pas codé sur un bit (aucun type ne l'est en C/C++), mais il est "fortement assimilable" à un bit puisqu'il ne peut prendre que deux valeurs comme je l'avais expliqué dans mon premier poste.
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Citation Envoyé par Swoög
    C'est vrai, si on se restreint strictement au standard C et C++, un char a une taille d'un byte, c'est à dire, le nombre minimal de bits nécessaire pour coder tous les caractères utilisés.
    C'est quoi cette définition bizarre ?
    D'après les standards C et C++, un byte fait au moins 8 bits, ce qui signifie qu'il peut en fait nécessiter plusieurs bytes au niveau hardware pour les machines où ceux-ci sont plus petits (au sens hardware du terme, un byte est l'espace mémoire addressable le plus petit).
    Je ne vois pas où se situe "le nombre minimal de bits nécessaire pour coder tous les caractères utilisés". D'ailleurs d'après Unicode, ce serait 21.

    Mais le plus souvent, c'est un octet, il est très qu'une autre unité soit utilisée...
    Sur les processeurs modernes, il n'y a guère que quelques processeurs spécialisés (souvent en temps réel) où ce n'est pas un octet.

    Ou bien meme un type de 32bits et l'initialiser avec une valeur hexadecimal?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uint32_t foo = 0x00000001;
    ou similaire...

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    C'est quoi cette définition bizarre ?
    C'est presque celle des normes C (voir 3.6) et C++ (voir 1.7).

    C89 définit un byte comme l'unité de stockage capable de contenir n'importe quel membre du jeu de base, un caractère comme ce qui tient dans un byte et un caractère multibyte comme une sequence de bytes représentant un membre d'un jeu de caractères étendu.

    C99 et C++ font plus ou moins de même, au moins pour byte (j'ai pas vu de définition de character dans C++).

    D'après les standards C et C++, un byte fait au moins 8 bits, ce qui signifie qu'il peut en fait nécessiter plusieurs bytes au niveau hardware pour les machines où ceux-ci sont plus petits (au sens hardware du terme, un byte est l'espace addressable le plus petit).
    Non, la définition traditionnelle de byte, c'est "goup of bits sufficient to represent one character", le mot a été inventé en 1958 par Buccholz. C'est très proche de la notion de C et C++, à part que ces langages imposent en plus au byte d'avoir au moins 8 bits, d'être adressable (mais le fait que void* et char* peuvent être plus gros que les pointeurs normaux est là pour les machines où les bytes ne sont pas adressable) et de pouvoir adresser toute la mémoire (ce qui impose pour le C et le C++ d'utiliser des bytes dont la taille divise exactement la taille du mot, ce qui n'a pas toujours été la pratique).

    Les machines adressables par mots stockaient généralement plusieurs caractères par mots et avaient parfois des instructions manipulant des bytes, même s'ils n'avaient pas d'adresse et pouvaient être de taille variable (voir par exemple le PDP-10 qui avait des instructions pour manipuler des bytes de n'importe quelle taille, de 1 à 36 bits; on l'a utilisé au moins avec des bytes de 7 bits -- pour du vrai ascii, un bit par mot n'était dans aucun byte -- de 6 bits -- la limite historique de 6 caractères sans distinction de minuscule/majuscule pour l'édition de lien vient de ce genre de jeux là, 6x6 = 36 ça tient dans un mot de cette classe d'ordinateur courante jusqu'au début des années 80 -- ou 9 bits -- pour le compilateur C dans le mode le plus "normal")

    Je ne vois pas où se situe "le nombre minimal de bits nécessaire pour coder tous les caractères utilisés". D'ailleurs d'après Unicode, ce serait 21.
    La définition historique date d'avant les codages multibytes, les codages larges et unicode.

Discussions similaires

  1. Comment declarer un variable de message ?
    Par whbh dans le forum Langage
    Réponses: 21
    Dernier message: 28/01/2006, 12h23
  2. Réponses: 3
    Dernier message: 15/12/2005, 22h04
  3. Comment déclarer une variable globale
    Par davkick dans le forum C
    Réponses: 13
    Dernier message: 20/05/2005, 18h50
  4. [INDEPENDANT]Comment declarer son travail ?
    Par xufux dans le forum Freelance
    Réponses: 21
    Dernier message: 03/07/2004, 23h23
  5. Réponses: 2
    Dernier message: 22/03/2004, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo