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

Langage C++ Discussion :

Ecrire un "int" dans un "char*"


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 427
    Par défaut Ecrire un "int" dans un "char*"
    Bonjour,

    j'essaie d'écrire un "int" dans un "char*" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int width = 200;
    char* size = (char*)malloc( sizeof(int) );
    memcpy( size, &width, sizeof(int) );
    le problème est que le "char*" est écrit dans l'ordre inverse, je suis obligé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char temp0 = size[0];
    char temp1 = size[1];
    size[0] = size[3];
    size[1] = size[2];
    size[2] = temp1;
    size[3] = temp0;
    Merci

  2. #2
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    C'est que tu es sur un système en Little indian, où les octets des entiers vont du moins significatif au plus significatif. lien wikipédia
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 427
    Par défaut
    C'est ce que je pensais, la plupart des systèmes sont en Little endian (Linux, Windows, Mac), je ne comprends pas pourquoi C++ copie l'Int en Big endian sur un système Little endian.

  4. #4
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 381
    Par défaut
    Citation Envoyé par pol2095 Voir le message
    C'est ce que je pensais, la plupart des systèmes sont en Little endian (Linux, Windows, Mac)
    Le fait d'être en little-endian ou big-endian dépend de l'architecture du processeur et de la façon dont les données sont stockées dans des fichiers ou transférées via des protocoles (voir lien wikipédia plus haut). Les systèmes d'exploitation sont donc little-endian ou big-endian en fonction du processeur sur lequel ils tournent. Par exemple sur processeur Motorola, Linux est big-endian, pas little-endian.

    Citation Envoyé par pol2095 Voir le message
    je ne comprends pas pourquoi C++ copie l'Int en Big endian sur un système Little endian.
    Le nombre 12 reste "douze" qu'on l'écrive de gauche à droite (12 : d'abord les dizaines puis les unités) ou qu'on l'écrive de droite à gauche (21 : d'abord les unités, puis les dizaines). Base 16, 10, 2 ou n'importe quoi d'autre, ça revient au même.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 427
    Par défaut
    J'ai testé sur mon PC Intel avec Ubuntu et Fedora :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lscpu | grep "Boutisme"
    retourne "Little Endian", ça dépend du CPU

    non, quand on essaie de recupérer l'int via le JNI Android en Java, la valeur n'est pas la même suivant le Boutisme.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    On parle de sérialisation ou de transformer un entier en chaîne de charactères ?
    Si c'est le premier https://bousk.developpez.com/cours/serialisation-bases/
    Si c'est le second std::string s = std::to_string(200);
    Et non pas le médiocre code C présenté.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6]ecrire une chaine de byte dans la base de registre
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 17/12/2008, 10h50
  2. Réponses: 2
    Dernier message: 03/12/2004, 09h27
  3. Ecrire du texte en couleurs dans un composant
    Par wutang dans le forum Composants
    Réponses: 11
    Dernier message: 12/07/2004, 10h55
  4. [langage] Ecrire un bloc de texte dans un fichier
    Par sarahbes dans le forum Langage
    Réponses: 6
    Dernier message: 10/06/2004, 11h40
  5. Réponses: 4
    Dernier message: 23/10/2003, 08h03

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