Tableau de byte

Résolu
Overkill06 Messages postés 16 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 27 septembre 2007 - 27 sept. 2007 à 15:29
Overkill06 Messages postés 16 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 27 septembre 2007 - 27 sept. 2007 à 16:52
Bonjour à tous,
J'ai un tableau de byte qui m'ennuie fortement...
Je vous explique, j'envoie des données sur le réseau et j'aurai besoin d'obtenir exactement le même nombre d'octects à l'arrivée.
Jusque là, tout va bien !
MAIS pour recevoir le flux entrant, je dois créer un buffer, par défault j'ai mis 512 octects, donc lorsque je reçois des paquets inférieurs il me les complete par de 0. Et c'est bien là le problème, j'envoie le paquet à une api qui me fait une vieille erreur parcequ'il attend exactement le même nombre d'octects et pas une valeur par défaut.

Tout ça pour en venir à une question simple :
Comment faire un trim des 0 en fin des tableau de byte afin de recréer un tableau de la bonne taille.

byte[] lb_buffer = new byte[512];
 po_client.Socket.Receive(lb_buffer);
//A ce moment j'ai tableau [12,152,363,0,0,0,....]
byte[] lb_buffer_bonne_taille = la_fonction_magique_qu_il_me_manque(lb_buffer);

Un gros merci par avance.

Yohann
 

7 réponses

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
27 sept. 2007 à 15:39
La fonction "Receive" ne te renvoie pas le nombre d'octets reçus ? (je ne peux pas vérifier, donc je dit peut être une bêtise...)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
27 sept. 2007 à 16:29
ouch... que c'est moche

li_size = po_client.Socket.Receive(lb_buffer2);
byte[] lb_buffer3 = resize_byte_arrey(li_size, lb_buffer2);
....

        private byte[] resize_byte_arrey(int pi_size,byte[] lb_array_byte)
        {
            byte[] lb_data = new byte[pi_size];

            Array.Copy(lb_array_byte, lb_data, pi_size);

<strike>            for (int i = 0; i < pi_size; i++)
            {
                lb_data[i] = lb_array_byte[i];
            }
</strike>            return lb_data;
        }

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
3
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
27 sept. 2007 à 16:36
Et tant qu'à faire :

resize_byte_arrey -> ResizeByteArray

:)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
27 sept. 2007 à 16:44
allez... une p'tite dernière si t'es en .net 2.0

Array.Resize(ref lb_buffer3, li_size);

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Overkill06 Messages postés 16 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 27 septembre 2007
27 sept. 2007 à 16:04
Merci de ta réponse, effectivement la fonction retourne bien la taille, aprés il suffit de créer un tableau de la bonne taille et d'y insérer les données.

....
li_size = po_client.Socket.Receive(lb_buffer2);
byte[] lb_buffer3 = resize_byte_arrey(li_size, lb_buffer2);
....

        private byte[] resize_byte_arrey(int pi_size,byte[] lb_array_byte)
        {
            byte[] lb_data = new byte[pi_size];
            for (int i = 0; i < pi_size; i++)
            {
                lb_data[i] = lb_array_byte[i];
            }
            return lb_data;
        }
0
Overkill06 Messages postés 16 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 27 septembre 2007
27 sept. 2007 à 16:35
Merci Sebmafate, c'est encore mieux.

 
0
Overkill06 Messages postés 16 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 27 septembre 2007
27 sept. 2007 à 16:52
Parfait et surtout : un grand MERCI !
 
0
Rejoignez-nous