CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

CSharp - Besoin d'aide bytes, hex, binaire

Gensetsu
Gensetsu
Niveau 23
14 septembre 2020 à 15:59:45

Salut,
Je suis en train de créer un programme qui analyse des packets. Je recois donc des données sous forme de tableau de bytes.
Etant débutant dans tout ce qui est données, j'ai du mal à comprendre certains concepts.

Dans le premier packet je recois les bytes suivants :

  • 0 - 5 - 8 - 0 - 0 - 7 - 170 - 0 - 0 - 7 - 178

En binaire :

  • 0 - 101 - 1000 - 0 - 0 - 111 - 10101010 - 0 - 0 - 111 - 10110010

En hex :

  • 00-05-08-00-00-07-AA-00-00-07-B2

L'opération que je souhaite effectuer est toute simple, il s'agirait de lire un Short sur les 2 premiers bytes, un short étant encodé sur 2 bytes.

Voilà comment je procède :

Fonction pour lire le nombre de bytes que l'on souhaite :
https://codeshare.io/GAbgyE

Fonction pour lire un short :
https://codeshare.io/5glAKD

Le soucis c'est que le code ne me donne pas le bon nombre, je suis supposé recevoir un short d'une valeur de 5 car:
Un short = 2 bytes
Deux premiers bytes de mon tableau : 05
En hex : 00 05
Hex > Decimal = 5

Je recois 1280 avec mon programme :hum:

Désolé du gros pavé moche et non structuré, ainsi que pour les fautes :hum:
En espérant recevoir de l'aide, merci ! :ange:

Message édité le 14 septembre 2020 à 16:01:03 par Gensetsu
gorz94
gorz94
Niveau 6
14 septembre 2020 à 16:02:58

C'est très simple; 1280, c'est 5 * 8, autrement dit ton tableau est lu à l'envers.
Renseigne toi sur le BigEndian et LittleEndian, tu comprendras. :hap:

Gensetsu
Gensetsu
Niveau 23
14 septembre 2020 à 16:13:57

Le 14 septembre 2020 à 16:02:58 gorz94 a écrit :
C'est très simple; 1280, c'est 5 * 8, autrement dit ton tableau est lu à l'envers.
Renseigne toi sur le BigEndian et LittleEndian, tu comprendras. :hap:

Yes je viens de voir ça à l'instant :rire:
Les bytes que je reçois sont en Little Endian sauf que j'ai besoin de les lires en Big Endian :(
Du coup dans ma fonction Read j'ai ajouté avant le return data un Array.Reverse(data) pour pouvoir le lire en Big.

Donc du coup le topic sert plus à rien :hap:
Ah si, si vous pouvez analyser mon code et me dire ce qui pourrait être optimisé, ou simplement des conseils ou des explications... Merci !
Et merci de ta réponse, en effet j'avais totalement zappé l'endianess :hap:

Message édité le 14 septembre 2020 à 16:15:16 par Gensetsu
gorz94
gorz94
Niveau 6
14 septembre 2020 à 16:38:19

Juste comme ça, ton "Position" commence bien à -1 ?
Sinon, t'as un CopyTo que tu peux faire pour te simplifier la vie.

Data.CopyTo(newArr, ...)

Tu peux spécifier que tu copies les éléments [i,j] de Data à la position k de newArr. C'est plus factorisé.

Gensetsu
Gensetsu
Niveau 23
14 septembre 2020 à 16:51:20

Le 14 septembre 2020 à 16:38:19 gorz94 a écrit :
Juste comme ça, ton "Position" commence bien à -1 ?
Sinon, t'as un CopyTo que tu peux faire pour te simplifier la vie.

Data.CopyTo(newArr, ...)

Tu peux spécifier que tu copies les éléments [i,j] de Data à la position k de newArr. C'est plus factorisé.

Hum non ma position ne commence pas à moins un. En fait dans la classe "BinaryReader" j'ai deux properties : un tableau de bytes Data, un int privée Position.
Le constructeur de la classe prend un argument, le tableau de bytes. Toujours dans le constructeur je stipule que Position = 0.
Pourquoi cela change quelque chose ? (Car finalement ma fonction Read lit bien les bytes que je veux...)

Eh merci pour le Copy To, je connaissais pas je vais essayer !

Message édité le 14 septembre 2020 à 16:52:06 par Gensetsu
boucif
boucif
Niveau 24
14 septembre 2020 à 19:50:47

Que se passe til si tu fais une deuxième lecture dans la même classe ???

Gensetsu
Gensetsu
Niveau 23
14 septembre 2020 à 21:08:50

Le 14 septembre 2020 à 19:50:47 boucif a écrit :
Que se passe til si tu fais une deuxième lecture dans la même classe ???

Ben par exemple mon tableau fait 11 bytes, dans la première lecture je veux lire un short donc 2 bytes et position + 2, lors de la deuxième lecture je veux lire un int (4 bytes), mon algorithme lira ces 4 bytes à partir de la deuxième position et ainsi de suite, le programme fera ensuite position + 4 donc 6, il restera encore 5 bytes à lire à partir de la position 6.
Je sais pas si c'est clair :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment