Tableau de byte

Résolu
Signaler
Messages postés
16
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
27 septembre 2007
-
Messages postés
16
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
27 septembre 2007
-
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

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
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
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
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]
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
Et tant qu'à faire :

resize_byte_arrey -> ResizeByteArray

:)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
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]
Messages postés
16
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
27 septembre 2007

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;
        }
Messages postés
16
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
27 septembre 2007

Merci Sebmafate, c'est encore mieux.

 
Messages postés
16
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
27 septembre 2007

Parfait et surtout : un grand MERCI !