Meilleur methode pour recuperer un short dans un tableau de byte

Meilleur methode pour recuperer un short dans un tableau de byte - Java - Programmation

Marsh Posté le 25-04-2003 à 15:10:47    

Salut, comment insérer puis récupérer un short (ou int ...) dans un byte [] et le récupérer ensuite.
En fait, j'ai un byte [], et je souhaite lui insérer un short au debut, et le récupérer ensuite.
Comment faire cela proprement ?
De meme, comment fait on pour affecter un tableau (de byte par exemple) à un autre , (=> faire une copie, autrement que via un for)
Merci.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 25-04-2003 à 15:10:47   

Reply

Marsh Posté le 25-04-2003 à 15:16:52    

si tu veux le rajouter au début, t'as pas trop le choix : faut en créer un nouveau de taille n+1, mettre ton (byte) short au début et faire une copie du reste.
 
pour faire une copie de tableau de façon optimale, il faut se servir de System.arrayCopy()

Reply

Marsh Posté le 25-04-2003 à 15:22:36    

au fait, pour récupérer ton short, tu as juste à faire un (short) tonTableau[0]
 
 
Si tu as le choix, essaye d'utiliser une autre structure qu'un tableau ... une linkedList pourrait être plus efficace si tu as bcp d'ajout ou de retrait à faire en début.

Reply

Marsh Posté le 25-04-2003 à 15:28:04    

benou a écrit :

si tu as bcp d'ajout ou de retrait à faire en début.


 
Tu peux aussi mettre ta liste à l'envers et faire ces rajouts à la fin (ca devient une pile dans ce cas)


Message édité par _gtm_ le 25-04-2003 à 15:28:30
Reply

Marsh Posté le 27-04-2003 à 18:27:00    

J'ai pas le choix pour le byte [] (c'est pour envoyer dans un datagramme UDP).
Mais si je met mon short dans mon tableau de byte (avec (byte)short), il va etre tronque non ...
Moi ce que je veux dire, c'est comment mettre puis récupérer un nombre 16 bits dans un tableau de byte.
Actuellement, j'utilise un byte. Il sert en fait d'identifiant pour le datagramme (numéro (quasi) unique). Alors 256 valeurs c'est trop peu.
Il me faut au moins un identifiant sur 16 bits, voire 32 (et pourquoi pas meme 64).
Alors comment mettre cet identifiant devant / à la suite des byte à envoyer, et comment le récupérer.
Et y-a-t-il un equivalent de sizeof en JAVA ?
Ou faut ke je continue à utiliser une variable SIZEOF_ID que j'initialise manuellement avec la taille (en octets) de l'id ?
Si vous avez une meilleure méthode pour attacher un id à un datagramme je suis preneur.
Le but est de pouvoir détecter une perte de datagramme et demander sa ré-expédition.
Si vous avez un lien sur la programmation avancée avec UDP (faire en somme ce que fait TCP : assurer l'arrivée des datagrammes et gérer leur ordre).
J'utilise UDP parce que on me l'a demandé (=> comparer TCP et UDP).
Merci.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 27-04-2003 à 19:49:08    

pour transformer un short en tableau de byte, tu peux fire comme ca :  
 

Code :
  1. public static byte[] toBytes(short s) {
  2.    return new byte[] {(byte) (s >> 8), (byte) s};
  3. }


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-04-2003 à 19:51:12    

Tu prends ton short 16 bits que j'appelerais x.
Tu passes d'abord les bits de poids faible puis les poids forts (ou l'inverse c'est au choix) dans ton byte[] comme ceci :  
 
byte bitsPoidsFaibles =  (byte)(x&255);
ajouter bitsPoidFaibles a byte[]
byte bitsPoidsForts = (byte)((x>>8)&255);
ajouter bitsPoidsForts a byte[]
 
 
Pour le recupere ensuite tu fait l'inverse
x = (short)(bitsPoidsFaibles&255) + (short)((bitsPoidsForts<<8)&255)


Message édité par fykman le 29-04-2003 à 00:27:41
Reply

Marsh Posté le 27-04-2003 à 19:57:28    

pkoi faire le &255 ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 28-04-2003 à 17:30:16    

Ok. Donc faut le faire a la main comme je le pensais.
Bon j'avais un peu la flemme, mais avec votre code j'ai plus d'excuses.
Merci.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-04-2003 à 20:13:03    

HelloWorld a écrit :

Salut, comment insérer puis récupérer un short (ou int ...) dans un byte [] et le récupérer ensuite.
En fait, j'ai un byte [], et je souhaite lui insérer un short au debut, et le récupérer ensuite.
Comment faire cela proprement ?
De meme, comment fait on pour affecter un tableau (de byte par exemple) à un autre , (=> faire une copie, autrement que via un for)
Merci.


 
vous avez remarqué le jeu de mots dans le titre ?  :??:

Reply

Marsh Posté le 28-04-2003 à 20:13:03   

Reply

Marsh Posté le 28-04-2003 à 20:18:34    

airseb a écrit :


 
vous avez remarqué le jeu de mots dans le titre ?  :??:  

c nul http://wickedweasel.com/oz/galleries/model_krissy/tn_k007.jpg


Message édité par the real moins moins le 28-04-2003 à 20:25:52

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-04-2003 à 20:25:30    

Citation :

sujet: Meilleur methode pour recuperer un Short dans un tableau de Byte


Utiliser des containers non typé ?¿?
Ça marche aussi pour récupérer des pantalons dans des tableaux de chaussures.
 
 
 
 
 
 
 
 
 
 
 
 
..... mouais, je suis un peu fatigué ajourd'hui ......

Reply

Marsh Posté le 28-04-2003 à 20:42:04    

airseb a écrit :


vous avez remarqué le jeu de mots dans le titre ?  :??:  


ouais.
 
c'est dingue on arrive à mettre que 2 byte dans un short alors qu'on peut en mettre plein dans un String :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 28-04-2003 à 20:43:28    

benou a écrit :


ouais.
 
c'est dingue on arrive à mettre que 2 byte dans un short alors qu'on peut en mettre plein dans un String :/

moi avec une seule c'est tout rempli  :sol:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-04-2003 à 21:00:04    

the real moins moins a écrit :

moi avec une seule c'est tout rempli  :sol:  


le String  :??:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 28-04-2003 à 21:04:47    

benou a écrit :


le String  :??:  

avec une seule byte oui :o
bon allez deux  :sarcastic:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-04-2003 à 00:25:52    

benou a écrit :

pkoi faire le &255 ?


 
Le &255 est un masque binaire (un ET logique avec 0000000011111111) ce qui garantie que les bits de poids forts soit nuls. C'est pas absolument necessaire, mais c'est plutot une securité qui garantie que le cast de short en byte se passe bien (le premier bit de poids fort est un bit de signe).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed