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 :

conversion char long


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut conversion char long
    salut,

    c possible de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    int a;
    char b[4];
    a=*((int*)b);
    ?
    merci

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Ou ton simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a;
    char b[4];
    a = (int)b[0];
    Oui, c'est possible.

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Jpense que oui

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par gege2061
    Ou ton simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a;
    char b[4];
    a = (int)b[0];
    Oui, c'est possible.
    Oué mais la ça va prendre la valeur du premier car, ce n'est pas ce qu'il veut faire

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Gruik
    Oué mais la ça va prendre la valeur du premier car, ce n'est pas ce qu'il veut faire
    b[0] ça revient au même que *b puisque b est l'adresse du premier élément.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    vous pouvez me donner plus d'explication svp

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Oui mais *b represente un caractere et ça retournera pas plus que la valeur maxi pour le type de *b

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gege2061
    Ou ton simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a;
    char b[4];
    a = (int)b[0];
    Oui, c'est possible.
    Ce n'est pas ce que veux le P.O.

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Gruik
    Oui mais *b represente un caractere et ça retournera pas plus que la valeur maxi pour le type de *b
    Euh oui mais c'est vrai dans les deux cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int main (void)
    {
      int a;
      char b[4] = {'a', 'b', 'c', 'd'};
     
      a = *((int*)b);
      printf ("%c\n", a);
     
      a = b[0];
      printf ("%c\n", a);
      return 0;
    }
    Donne la même chose

    @moon93 : en fait ça serait plus à toi de nous dire ce que tu pense faire de ce bout de code

  10. #10
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par gege2061
    Euh oui mais c'est vrai dans les deux cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int main (void)
    {
      int a;
      char b[4] = {'a', 'b', 'c', 'd'};
     
      a = *((int*)b);
      printf ("%c\n", a);
     
      a = b[0];
      printf ("%c\n", a);
      return 0;
    }
    Donne la même chose

    @moon93 : en fait ça serait plus à toi de nous dire ce que tu pense faire de ce bout de code
    Oui, mais si tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       a = *((int*)b);
       printf ("%d\n", a);
     
       a = b[0];
       printf ("%d\n", a);

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par moon93
    c possible de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int a;
    char b[4];
    a=*((int*)b);
    C'est techniquement possible, oui, mais ce n'est pas portable. (Force 8 sur l'Echelle de Goret qui en compte 10). Il y a des int de 2, 4 8 char, big-endian, little-endian, mid-endian... Dans la pratique, on ne fait pas ça.

    Pour savoir quoi faire, il faut que tu indiques la signification de chaque char de b[4].

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    est ce que j'aurai le meme résultat en tapant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    int a;
    char b[4];
    a=(b[0]<<24)+(b[1]<<16)+(b[2]<<8)+b[3];
    printf('%s',a);

  13. #13
    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 moon93
    est ce que j'aurai le meme résultat en tapant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    int a;
    char b[4];
    a=(b[0]<<24)+(b[1]<<16)+(b[2]<<8)+b[3];
    printf('%s',a);
    Le format %s, c'est pas pour des int...

    Dans le premier cas on pouvait avoir n'importe quoi, y compris des crashs (ce qui n'est pas du tout impossible sur un sparc par exemple qui force le respect de l'alignement).

    Dans le second on a un comportement dependant de l'implementation (est-ce que char est signe ou pas) avec un risque de comportement indefini du au debordement.

    Si tu veux manipuler un format binaire, il va falloir le definir et ensuite on peut discutter sur la maniere de faire les conversion vers et de ce format.
    I

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    c un unsigned char

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    j'ai pas compri ce tu veux dire par:
    'Si tu veux manipuler un format binaire, il va falloir le definir'?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    a l'execution j'aurai un résultat!!!! une chaine genre: -118s
    lorsque j'essaye d'afficher un int que j'ai défini.
    j'utlise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       printf ("%d\n", a);
    !!!

Discussions similaires

  1. Conversion Lat/Long vers UTM
    Par efficks dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 12/12/2005, 17h13
  2. conversion char wide char
    Par ep31 dans le forum MFC
    Réponses: 4
    Dernier message: 15/11/2005, 08h14
  3. Pb Invalid Conversion "char" to "char*"
    Par kazarn dans le forum C++
    Réponses: 3
    Dernier message: 02/03/2005, 13h24
  4. Conversion char * vers wchar_t
    Par Zapan dans le forum C++
    Réponses: 4
    Dernier message: 24/02/2005, 15h56
  5. Réponses: 3
    Dernier message: 26/05/2004, 23h03

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