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

  FORUM HardWare.fr
  Programmation
  Java

  Casting byte[] vers int[] ou long[]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Casting byte[] vers int[] ou long[]

n°1887839
skirb
Posté le 25-05-2009 à 23:57:07  profilanswer
 

Bonjour, je cherche mais en vain un moyen de convertir un tableau du type primitif byte vers un tableau de int.
D'après la spec, la taille d'un byte est de 1 octet, contre 4 octets pour un int.
Je voudrais pouvoir faire ça en gros :
int[] i;
byte[] b = {0,0,0,1};
i = (int[])b
System.out.print(i[0]);  affiche : 1

 

plus dans le contexte :
void fonction(byte[] b) {
int[] data = (int[])b;
for(int i = data.length; i > 0; i--)
    data[i] ^= un_bitmask_32_bits
}

 

i.length serrait egal à b.length/4. Je comprend que le compilateur refuse, il faudrait détruire 'b' pour remplacer par exemple son champ length, et penser aux soucis d'alignements; mais ce qui m'intéresse, ce serrai de pouvoir travailler a partir de données brutes, sans avoir à les recopier.
Je travail sur des socketsChannel qui n'acceptent que des ByteBuffer en entrée, ceci ne fonctionnant qu'avec le type byte[].
J'ai besoin d'effectuer des opérations sur tous les octets qui transitent, faire des opérations booléennes. Il serrait naturel en C de travailler avec un tableau de int voir de long afin de traiter les octets par paquets de 4 ou 8, et ainsi effectuer bien plus vite. Etant au niveau des socket, c'est une fonction très souvent appelée et ce gain ne serrai pas un luxe.
Une idée ? J'aimerai ne pas en arriver à envisager d'écrire du bytecode à la main ?

  


Message édité par skirb le 26-05-2009 à 00:00:59
mood
Publicité
Posté le 25-05-2009 à 23:57:07  profilanswer
 

n°1887868
liouan
Posté le 26-05-2009 à 09:28:34  profilanswer
 

la seule manière que je vois est de le faire un par un, dans une boucle:
 
byte[] b = {0,0,0,1};
int[] i=new int[b.length];
for(int k=0;k<i.length;k++){
 i[k]=b[k];
}

n°1887877
skirb
Posté le 26-05-2009 à 09:43:33  profilanswer
 

Merci, c'est effectivement ce que je me suis résolu à faire pour le moment, mais ça reste relativement inefficace d'après mes tests.


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

  Casting byte[] vers int[] ou long[]

 

Sujets relatifs
conversion poiteur sur fonrtion membre vers arguement de CreateThreadManipuler des donnéesexcel (décallage vers le bas + transposer)
image et .jrxml#1242 - Subquery returns more than 1 row
[batch] Calcul d'un fichier txt et envoi vers sqlSauvegarde ntbackup vers ftp
[VC++] redirection de la sortie standard vers l'Output windowFormatter un Long en un String lisible
Export de données Access vers Excel avec formules excel préservéesExport Access vers Excel
Plus de sujets relatifs à : Casting byte[] vers int[] ou long[]


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