2011-02-25 5 views
1

Quelqu'un sait comment convertir un grand nombre d'octets, ex. 1000 octets, en un int/long etc dans java?Convertir un octet en entier et inversement

+6

un int est de 32 bits (4 octets) et un long de 64 bits (8 octets). Que feriez-vous avec les autres 996 octets (ou 992) du tableau? Que veux tu vraiment faire? –

Répondre

2

Vous pouvez utiliser une boucle

byte[] bytes = 
int[] ints = new int[bytes.length]; 
for(int i=0;i<bytes.length;i++) 
    ints[i] = bytes[i]; 

1000 éléments pourraient prendre jusqu'à 10 micro-secondes de cette façon.

+2

Beaucoup moins que sur un PC moderne. –

+0

vrai, mais si 10 micro-secondes ne sonne pas comme longtemps, peu importe ce que c'est. ;) –

2

Pour convertir un byte à un int en Java, vous avez deux options:

byte val = 0xff; 
int a = val;   // a == -1 
int b = (val & 0xff); // b == 0xff 

Il n'y a pas de méthode dans la bibliothèque Java pour convertir un tableau d'un type primitif à un autre, vous aurez à fais-le manuellement.

0

Merci Paŭlo. Voici la réponse corrigée:

public class Main { 

    public static int[] convert(byte[] in) { 
     int bytesPerSample = 4; 
     int[] res = new int[in.length/bytesPerSample]; 

     for (int i = 0; i < res.length; i++) { 
      int bOffset = i * bytesPerSample; 
      int intVal = 0; 
      for (int b = 0; b < bytesPerSample; b++) { 
       int v = in[bOffset + b]; 
       if (b < bytesPerSample - 1) { 
        v &= 0xFF; 
       } 
       intVal += v << (b * 8); 
      } 
      res[i] = intVal; 
     } 

     return res; 
    } 

    public static byte[] convert(int[] in) { 
     int bytesPerSample = 4; 
     byte[] res = new byte[bytesPerSample * in.length]; 

     for (int i = 0; i < in.length; i++) { 
      int bOffset = i * bytesPerSample; 
      int intVal = in[i]; 
      for (int b = 0; b < bytesPerSample; b++) { 
       res[bOffset + b] = (byte) (intVal & 0xFF); 
       intVal >>= 8; 
      } 
     } 

     return res; 
    } 

    public static void main(String[] args) { 
     int[] in = {33, 1035, 8474}; 
     byte[] b = convert(in); 
     int[] in2 = convert(b); 
     System.out.println(Arrays.toString(in2)); 
    } 

}