Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
748 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Conversion byte[4] en int

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Conversion byte[4] en int

n°949843
Rafax
Posté le 10-01-2005 à 11:09:17  profilanswer
 

Bonjour à tous,
 
J'ai besoin de convertir un int en byte[4] puis de reconvertir ce byte[4] en int.
Voila ce que je fais pour int => byte[4] : Qu'en pensez vous ?

Code :
  1. byte[] baTailleInt = new byte[4];
  2.     for( i=0; i<4; i++ )
  3.     {
  4.          baTailleInt[i] = (byte) (iMonInt>>(i*8));
  5.     }


Par contre, je ne sais pas comment faire pour faire le chemin inverse byte[4] => int ... si vous aviez une idée ...
 
merci d'avance,
Rafax

mood
Publicité
Posté le 10-01-2005 à 11:09:17  profilanswer
 

n°949877
spokup
Posté le 10-01-2005 à 11:34:51  profilanswer
 

Je fait pas de java mais voila ce que ça donnerai en C
 
int a=0;
char b[4] = ... ;
for(int i=0; i<4; i++)
{
 a |= b[i]<<((3-i)*8);
}
 
ou encore
a = b[3]<<24 | b[2]<<16 | b[1]<<8 | b[0];


Message édité par spokup le 10-01-2005 à 11:49:53
n°949883
Rafax
Posté le 10-01-2005 à 11:53:50  profilanswer
 

ok, merci beaucoup spokup, j'essaie de suite.

n°950102
Rafax
Posté le 10-01-2005 à 15:47:10  profilanswer
 

Bon alors voilà :
Pour décomposer un int en tableau de 4 bytes :

Code :
  1. int i0 = new Integer((iArgs>>>24)).intValue();
  2. int i1 = new Integer(((iArgs<<8)>>>24)).intValue();
  3. int i2 = new Integer(((iArgs<<16)>>>24)).intValue();
  4. int i3 = new Integer(((iArgs<<24)>>>24)).intValue();


 
Pour recomposer l'int :  

Code :
  1. baTailleBlob[0]<<24 | baTailleBlob[1]<<16 | baTailleBlob[2]<<8 | baTailleBlob[3]


 
Dans la premiere partie, j'ai volontairement laissé des int ... alors que j'ai besoin d'avoir des bytes.
Le problème est qu'un byte est codé entre -128 et +127.
donc si un de mes 4 bytes de mon int est > 127 ... je passe en négatif et je ne sais pas comment faire.
Il semblerait qu'en ajoutant bit à bit (2e code), le signe devrait se retrouver sur le bit de poids fort du 1er byte [0], mais il n'en ait rien.
voilà le code complet que j'utilise pour tester cette partie... Si qqu'un se sent de taille de me donner un coup de main ...

Code :
  1. public static void main(String[] args)
  2. {
  3.  try
  4.  {
  5.   int iArgs = new Integer(args[0]).intValue();
  6.         byte[] baTailleBlob = new byte[4];
  7.         System.out.println("iArgs = " + iArgs);
  8.         int i0 = new Integer((iArgs>>>24)).intValue();
  9.         int i1 = new Integer(((iArgs<<8)>>>24)).intValue();
  10.         int i2 = new Integer(((iArgs<<16)>>>24)).intValue();
  11.         int i3 = new Integer(((iArgs<<24)>>>24)).intValue();
  12.         System.out.println("i0 =" + i0);
  13.         System.out.println("i1 =" + i1);
  14.         System.out.println("i2 =" + i2);
  15.         System.out.println("i3 =" + i3);
  16.         baTailleBlob[0] = new Byte(""+i0).byteValue();
  17.         System.out.println("baTailleBLob[0] =" + baTailleBlob[0]);
  18.         baTailleBlob[1] = (byte)i1;
  19.         System.out.println("baTailleBLob[1] =" + baTailleBlob[1]);
  20.         baTailleBlob[2] = (byte)i2;
  21.         System.out.println("baTailleBLob[2] =" + baTailleBlob[2]);
  22.         baTailleBlob[3] = (byte)i3;
  23.         System.out.println("baTailleBLob[3] =" + baTailleBlob[3]);
  24.        
  25.         int iUnCompressedSize = baTailleBlob[0]<<24 | baTailleBlob[1]<<16 | baTailleBlob[2]<<8 | baTailleBlob[3];
  26.             System.out.println("iUnCompressedSize :" + iUnCompressedSize);
  27.  }
  28.  catch (Throwable e)
  29.  {
  30.   System.out.println("Erreur !" );
  31.             e.printStackTrace();
  32.  }
  33.  System.exit(0);
  34. }


Donc, en fait, tant qu'on passe en args[0] un entier dont aucun des 4 bytes ne dépasse 127 ... tout va bien ... sinon, c'est pas cool !
merci de votre aide.
 
Rafax

n°950106
lorill
Posté le 10-01-2005 à 15:52:06  profilanswer
 

https://opensvn.csie.org/traccgi/lu [...] ction.java
 
tout en bas, les 2 dernieres methodes statiques

n°950121
Evadream -​jbd-
Posté le 10-01-2005 à 16:17:29  profilanswer
 

Les unions ca n'existe pas en Java ?
 
union {
     unsigned char b[4] ;
     int a ;
}
 
Il faut faire attention à l'architecture, mais c'est l'idée.

n°950127
Rafax
Posté le 10-01-2005 à 16:20:23  profilanswer
 

C'est exactement ce que je voulais.
 
En fait, on code bien sur 4 bytes (4x1octet)
C'est mon décodage qui n'était pas bon...
 
Merci encore,
 
Rafax

n°950159
Rafax
Posté le 10-01-2005 à 16:57:51  profilanswer
 

Au fait, merci Lorill !  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Conversion byte[4] en int

 

Sujets relatifs
conversion couleurConversion de chiffres
Conversion HTML en TXTconversion de type en openCV
conversion d'une chaine de caractère en un entier unique[VB6] Conversion .doc en .pdf [résolu]
Pblm conversion BDD AccessXP vers 97Conversion char en int, float et double
Conversion String en PcharCommunication avec un serveur DNS : conversion byte en hexa
Plus de sujets relatifs à : Conversion byte[4] en int


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR