Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [Java] » Manipulation d'octets dans un fichier
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )


Auteur
Sujet : Manipulation d'octets dans un fichier
Sarsipius
Vétéran
Membre # 15109

 Avatar du membre
Lieu : Nancy [54]

Messages :
4454 (0.89 par jour)




Message du 28-05-2007 @ 11:00   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Salut tout le monde

je suis en train de me prendre la tête sur du code et avant que tout finisse dans un mur j'aurais besoin de votre aide !

je dispose d'un fichier binaire et je développe un parseur pour récupérer des données...

en gros tout fonctionne bien sauf quand je dois récupérer des entiers signés

j'ouvre mon fichier dans un BufferedInputStream et je crée un tableau de byte qui s'appelle buffer

Code :


while(bytesRemaining>0)
{
   buffer[bytesRead] = (byte) br.read();

   bytesRead ++;
   bytesRemaining --;
}



ensuite je manipule les bytes et là je patine

pour lire un entier non signé sur 2 octets je fais comme ça :

Code :


int value = ((((int)buffer[1])&0xff)<<8) + ((((int)buffer[0])&0xff)<<0);



mais comment je fais pour lire des entiers signés ?

bêtement je pensais que c'était comme ça mais j'aimerais avoir confirmation :

Code :


int value = (((int)buffer[1])<<8) + ((((int)buffer[0])&0xff)<<0);



merci
----------

 MacBook Air 13" mid 2011 Core i5, MacBook Air 13" early 2015 Core i5
 iPhone 6 plus 64Go silver, iPad Air 2 64Go grey
 Watch Sport Silver
- Haut de page -
bambino
Sage
Membre # 8669

 Avatar du membre
Lieu : lille

Messages :
1257 (0.23 par jour)




Message du 29-05-2007 @ 18:11   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Hum BufferedInputStream, ca m'a tout l'air d'etre du java ca!

Bon deux remarques alors:
-en java, il n'y a pas d'entiers non signés (ils ont tous un signe)
-les int sont codés sur 32 bits

Les bytes sont bien codés sur 8 bits, donc le principe est bon, et ici, tu n'est même pas obligé d'appliquer le masque &0xFF. tu aura donc un truc du genre:

int res= ((int)buffer[0])<<24 +((int)buffer[1])<<16 + ((int)buffer[2])<<8 + ((int)buffer[3])


[message édité le 29-05-2007 @ 18:14 Par bambino]
----------
Sachant que Woody Allen a déclaré: "Quand j'écoute Wagner, j'ai envie d'envahir la pologne", quelle musique écoute Georges Bush jr?
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23217 (3.69 par jour)


Score :

Message du 29-05-2007 @ 19:47   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

en java, pour un int codé sur 2 octe, faut que tu utilises le type short ou la clas Short
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
Sarsipius
Vétéran
Membre # 15109

 Avatar du membre
Lieu : Nancy [54]

Messages :
4454 (0.89 par jour)




Message du 30-05-2007 @ 10:56   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

bambino : tu ne te serais pas planté dans l'ordre des indices ? (enfin ça dépend si tu es un little ou big endian)

icy : c'est exact il faut que je vois ça
----------

 MacBook Air 13" mid 2011 Core i5, MacBook Air 13" early 2015 Core i5
 iPhone 6 plus 64Go silver, iPad Air 2 64Go grey
 Watch Sport Silver
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23217 (3.69 par jour)


Score :

Message du 30-05-2007 @ 11:06   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

y'a quand meme des methodes pour lire des tableau de short signé directement hein, sans avoir besoin de faire tes shift de tout les coté ...

http://java.sun.com/j2se/1.4.2/docs/api/org/omg/CORBA/portable/InputStream.html#read_short_array(short[],%20int,%20int)

----------
"May He touch you with His Noodly Appendage"
- Haut de page -
Sarsipius
Vétéran
Membre # 15109

 Avatar du membre
Lieu : Nancy [54]

Messages :
4454 (0.89 par jour)




Message du 30-05-2007 @ 11:17   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

il faut que je vois ça effectivement mais pour le moment ce n'est pas la priorité ;)
----------

 MacBook Air 13" mid 2011 Core i5, MacBook Air 13" early 2015 Core i5
 iPhone 6 plus 64Go silver, iPad Air 2 64Go grey
 Watch Sport Silver
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.043 secondes