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 :

ReadInt32 et ReadByte


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Par défaut ReadInt32 et ReadByte
    Bonjour, comment savoir le nombre de bits exacts que les méthodes ReadInt32 et ReadByte de System.IO lisent ?
    Je m'explique : Je lis l'entier 921 654 avec ReadInt32, ce qui corresond à
    00000000 00000000 00000011 10011001 sur 4 octets.
    Je me repositionne comme il faut dans le fichier et cette fois je lis 4 bytes en faisant 4 fois ReadByte. J'obtiens :
    54 - 16 - 14 - 0, ce qui correspond à 00110110 - 00010000 - 00001110 - 00000000, soit après conversion 907 021 824.
    Le résultat est différent, lire 4 bytes ne correspond pas à lire un Int32 (théoriquement sur 4 octets?), alors comment peut-on établir un lien entre les deux méthodes?

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                byte byte1 = 54;
                byte byte2 = 16;
                byte byte3 = 14;
                byte byte4 = 0;
     
                var r = byte4 << 24 | byte3 << 16 | byte2 << 8 | byte1;
     
                Console.WriteLine(r);
    ou plus générique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                for (int i = 0; i < array.Length; i++)
                    r |= array[i] << 8 * i;

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    54 - 16 - 14 - 0, ce qui correspond à 00110110 - 00010000 - 00001110 - 00000000, soit après conversion 907 021 824.
    Les octets de poids faibles étant enregistrés d'abord, le nombre lu vaut en binaire 00000000 0001110 0010000 00110110, soit 458 806.

    Je lis l'entier 921 654 avec ReadInt32, ce qui corresond à
    00000000 00000000 00000011 10011001 sur 4 octets.
    Comment as tu obtenu cete correspondance ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Par défaut
    > Jerede : C'étais pas vraiment ma question, justement c'est en sachant cela que je me suis demandé pourquoi cette formule ne fonctionne pas.

    > Graffito : Je savais pas que c'était lu à l'envers !! Voila qui devrait résoudre mon problème
    Bon je m'étais trompée, en fait 921 654 = 00000000 00001110 00010000 00110110 (et non pas 458 806, tu as omis un 0). Donc ça concorde !

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

Discussions similaires

  1. [Débutant] Problème avec ReadBytes Nombre non négatif requis.
    Par Canterlot dans le forum C#
    Réponses: 2
    Dernier message: 14/04/2014, 00h06
  2. readBytes depuis une socket
    Par Corvus dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 16/07/2009, 17h04

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