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 :

C Byte swapping


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par défaut C Byte swapping
    Bonjour à tous,

    ma question est la suivante: existe t il un moyen de byteswapper à la compilation un programme C?
    Le but est la lutte entre les indiens...généré sur Linux un binaire ne peut être relu sur Unix. Quel est le moyen de parer à cet inconvénient?

    Merci beaucoup !

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Fortran90
    Bonjour à tous,

    ma question est la suivante: existe t il un moyen de byteswapper à la compilation un programme C?
    Le but est la lutte entre les indiens...généré sur Linux un binaire ne peut être relu sur Unix. Quel est le moyen de parer à cet inconvénient?

    Merci beaucoup !
    La question est assez floue.....
    Tu utilises un cross-compilateur sous linux pour générer du code Unix ??? Si c'est le cas, je pense qu'il n'y a pas besoin de faire du swapping.
    Ou bien tu souhaites plutot faire tourner du code Linux sous Unix ??? Dans ce cas n'y comptes meme pas, il n'y a aucune chance....

  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
    Unix, ça existe encore?

  4. #4
    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 Fortran90
    ma question est la suivante: existe t il un moyen de byteswapper à la compilation un programme C?
    Non. Pourquoi faire ?
    Le but est la lutte entre les indiens...généré sur Linux un binaire ne peut être relu sur Unix. Quel est le moyen de parer à cet inconvénient?
    L'endianness n'a absolument rien à voir avec le système. Par contre il concerne le processeur. Il suffit d'utiliser le compilateur pour la bonne cible, d'avoir les bibliothèques pour cette même cible et tout ira bien.

    Tu veux faire de la compilation croisée, c'est ça ?

  5. #5
    Membre émérite Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Par défaut
    Unix, ça existe encore?
    c'est une blague?

    la plupart des entreprises qui ont un tantinet d'amour propre et d'amour de la sécurité ont leurs serveurs qui tournent sur unix...même microsoft (meme si je me demande ou ils vont chercher leur amour de la sécurité xD)

  6. #6
    Membre confirmé Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par défaut
    En fait, ce que je veux faire, c'est pouvoir générer un binaire sous unix avec un programme C, qui sera par la suite relu sous Linux par un autre programme C.
    L'endianness intervient à ce niveau : le binaire généré sous Unix est Big Endian, et le programme C sous linux s'attend à lire du little endian.

    En Fortran90 (rigolez pas les mecs, on programme encore en Fortran de nos jours!!!) il existe une option pour le compilo linux pgf90 (byteswapio pour ne pas la citer) qui permet de lire sous linux un binaire généré sous UNIX.

    Je me demandais si l'équivalent existe avec le C ou s'il y avait un moyen plus sioux d'arriver à ses fins....

  7. #7
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Fortran90
    En fait, ce que je veux faire, c'est pouvoir générer un binaire sous unix avec un programme C, qui sera par la suite relu sous Linux par un autre programme C.
    L'endianness intervient à ce niveau : le binaire généré sous Unix est Big Endian, et le programme C sous linux s'attend à lire du little endian.

    En Fortran90 (rigolez pas les mecs, on programme encore en Fortran de nos jours!!!) il existe une option pour le compilo linux pgf90 (byteswapio pour ne pas la citer) qui permet de lire sous linux un binaire généré sous UNIX.

    Je me demandais si l'équivalent existe avec le C ou s'il y avait un moyen plus sioux d'arriver à ses fins....
    Je ne vois absolument pas le rapport entre "générer un fichier binaire avec un programme écrit en C" et le compilateur C........

  8. #8
    Membre émérite Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Par défaut
    Je ne vois absolument pas le rapport entre "générer un fichier binaire avec un programme écrit en C" et le compilateur C........
    en fait, il ne veut pas générer un fichier binaire avec un programme écrit en C mais compiler ce programme C en fichier binaire qui soit compatible linux et unix si j'ai bien suivi

  9. #9
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par Fortran90
    En fait, ce que je veux faire, c'est pouvoir générer un binaire sous unix avec un programme C, qui sera par la suite relu sous Linux par un autre programme C.
    L'endianness intervient à ce niveau : le binaire généré sous Unix est Big Endian, et le programme C sous linux s'attend à lire du little endian.

    En Fortran90 (rigolez pas les mecs, on programme encore en Fortran de nos jours!!!) il existe une option pour le compilo linux pgf90 (byteswapio pour ne pas la citer) qui permet de lire sous linux un binaire généré sous UNIX.

    Je me demandais si l'équivalent existe avec le C ou s'il y avait un moyen plus sioux d'arriver à ses fins....
    Emmanuel a parlé de compilateur de plateformes croisées ( ou cross-compilation ) .
    Il faut utiliser cela sinon c'est pas possible...
    Sinon utiliser un compilateur spécifique Unix un autre Linux etc...
    Les problèmes MSB-LSB Little Endian comme il a dit c'est spécifique au CPU


    Citation Envoyé par Fortran90
    Bonjour à tous,

    ma question est la suivante: existe t il un moyen de byteswapper à la compilation un programme C?
    Sinon oui c'est possible.......avec des macros de traitement préprocesseur et définir ses propres types de données par exemple MyInteger, MyDouble etc...
    Prendre le code source de certains jeux multiplateformes c'est le cas ( comme Civilisation Call To Power)
    Ou bien le code source de SDL ( à vérifier ) ( www.libsdl.org)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifdef LINUX
    //.....
    #endif
    #ifdef UNIX
     
    #endif 
    #define BIG_ENDIAN
    #define LITTLE_ENDIAN
    Si Linux alors par exemple int i=1
    Si Unix alors utiliser des masques & et permuter les octets..

  10. #10
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    En Fortran90 (rigolez pas les mecs, on programme encore en Fortran de nos jours!!!) il existe une option pour le compilo linux pgf90 (byteswapio pour ne pas la citer) qui permet de lire sous linux un binaire généré sous UNIX.
    En C les IO binaires concernent des suites de byte qui ne sont pas réorganisées. Donc tu dois le faire à la main.

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Vous avez l'air de considérer Unix comme un OS... Dans l'usage informel, c'est une famille d'OS dont Linux, les BSD, Solaris, AIX, HP-UX,... font partie. Ces OS peuvent tourner sur des machines de boutitude différente. Certains (Linux, les BSD, Solaris au moins) sont même disponibles pour des machines de boutitude différente.

    UNIX est une marque déposée de l'OpenGroup qui peut être utilisée pour identifier les produits conforme à la Single Unix Specification (établie en collaboration avec POSIX et dont POSIX est un sous-ensemble; si je ne me trompe pas, pour le moment POSIX spécifie tout ce qui est dans la SUS mais certaines choses sont optionelles pour POSIX, pas pour SUS) ce qui fait que seuls des OS commerciaux ont le droit d'utiliser le nom.

  12. #12
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Fortran90
    Je me demandais si l'équivalent existe avec le C ou s'il y avait un moyen plus sioux d'arriver à ses fins....
    C'est plus sioux. Il est vrai que le Fortran est plus pratique sur ce coup là (en gros, le compilateur cache les problemes d'endianness en forcant l'utilisation de la meme quelque soit le processeur).
    Pour resoudre ton probleme en C, je te refere à cette page de la FAQ C qui discute bien les choses, je trouve.

Discussions similaires

  1. [C#] Conversion d'un byte[] en byte *
    Par karsh dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/12/2004, 10h53
  2. transtyper ^dword en ^byte ?
    Par - Robby - dans le forum Langage
    Réponses: 3
    Dernier message: 28/10/2003, 00h58
  3. aide pour swap ?
    Par formet dans le forum CORBA
    Réponses: 2
    Dernier message: 01/07/2003, 16h00
  4. Erreur dans l'utilisation de SWAP
    Par mire dans le forum Langage
    Réponses: 12
    Dernier message: 15/03/2003, 21h39
  5. swapping entre processeurs
    Par shef dans le forum MFC
    Réponses: 5
    Dernier message: 26/08/2002, 14h20

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