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 :

Decoder Big Endian


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Decoder Big Endian
    Bonjour

    Pour ne pas reinventer la roue, connaissez-vous une mehode efficace de conversion Big Endian en C#

    En C je truquais avec un pointeur de char et une salve de XOR

    Exemple : p1 etant un unsigned char * sur le short a convertir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    p2=p1+1;
                    *p1^=*p2;
                    *p2^=*p1;
                    *p1^=*p2;
    Mais comment etre aussi concis et efficace en C# ?

    Merci pour vos éventuelles suggestions

  2. #2
    Membre averti Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Points : 422
    Points
    422
    Par défaut
    Personnelement je fais comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
            private BinaryReader m_reader;
     
            private byte[] ReadBigEndianBytes(int count)
            {
                var bytes = new byte[count];
                int i;
                for (i = count - 1; i >= 0; i--)
                    bytes[i] = m_reader.ReadByte();
                return bytes;
            }
     
            public short ReadShort()
            {
                return BitConverter.ToInt16(ReadBigEndianBytes(2), 0);
            }
     
            public int ReadInt()
            {
                return BitConverter.ToInt32(ReadBigEndianBytes(4), 0);
            }
    ...
    et mon Writer est à peu près pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            public void WriteUShort(ushort @ushort)
            {
                WriteBigEndianBytes(BitConverter.GetBytes(@ushort));
            }
    Edit : Pas très bien compris, tu cherches à convertir du LittleEndian en BigEndian oû bien écrire en BigEndian ?

  3. #3
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Il y a huit mille façons d'écrire ça, tout dépend si tu veux quelque chose de clair ou d'optimisé, du format dans lesquelles tes données sont stockées, etc.

    Pour ma part, pour des valeurs 16 bits j'ai un petit faible pour "x = (x << 8) | ((x & 0xFF00) >> 8);" et ses variantes car ce code est explicite (il faut sans doute rajouter un "& 0xFF" à gauche, à vérifier).

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci

    Entretemps j'ai trouvé ceci qui semble pas mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int32 R=IPAddress.HostToNetworkOrder(br.ReadInt32());

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

Discussions similaires

  1. Conversion little vers big endian
    Par kris1980 dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 16/08/2007, 13h42
  2. Pb avec "BIG ENDIAN"
    Par pdgnr dans le forum Delphi
    Réponses: 2
    Dernier message: 04/09/2006, 09h37
  3. Big endian et Little endian?
    Par moon93 dans le forum C
    Réponses: 4
    Dernier message: 07/05/2006, 22h48
  4. Cast et little/big endian
    Par progfou dans le forum C
    Réponses: 8
    Dernier message: 29/03/2006, 18h54
  5. Comment écrire en big endian dans un fichier ?
    Par j3d dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/07/2005, 21h50

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