Bon alors voilà :
Pour décomposer un int en tableau de 4 bytes :
Code :
- int i0 = new Integer((iArgs>>>24)).intValue();
- int i1 = new Integer(((iArgs<<8)>>>24)).intValue();
- int i2 = new Integer(((iArgs<<16)>>>24)).intValue();
- int i3 = new Integer(((iArgs<<24)>>>24)).intValue();
|
Pour recomposer l'int :
Code :
- 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 :
- public static void main(String[] args)
- {
- try
- {
- int iArgs = new Integer(args[0]).intValue();
- byte[] baTailleBlob = new byte[4];
- System.out.println("iArgs = " + iArgs);
- int i0 = new Integer((iArgs>>>24)).intValue();
- int i1 = new Integer(((iArgs<<8)>>>24)).intValue();
- int i2 = new Integer(((iArgs<<16)>>>24)).intValue();
- int i3 = new Integer(((iArgs<<24)>>>24)).intValue();
- System.out.println("i0 =" + i0);
- System.out.println("i1 =" + i1);
- System.out.println("i2 =" + i2);
- System.out.println("i3 =" + i3);
- baTailleBlob[0] = new Byte(""+i0).byteValue();
- System.out.println("baTailleBLob[0] =" + baTailleBlob[0]);
- baTailleBlob[1] = (byte)i1;
- System.out.println("baTailleBLob[1] =" + baTailleBlob[1]);
- baTailleBlob[2] = (byte)i2;
- System.out.println("baTailleBLob[2] =" + baTailleBlob[2]);
- baTailleBlob[3] = (byte)i3;
- System.out.println("baTailleBLob[3] =" + baTailleBlob[3]);
-
- int iUnCompressedSize = baTailleBlob[0]<<24 | baTailleBlob[1]<<16 | baTailleBlob[2]<<8 | baTailleBlob[3];
- System.out.println("iUnCompressedSize :" + iUnCompressedSize);
- }
- catch (Throwable e)
- {
- System.out.println("Erreur !" );
- e.printStackTrace();
- }
- System.exit(0);
- }
|
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