Changer la dimension d'un byte array

Résolu
Signaler
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour,


J'ai l'habitude de manipuler des tableaux en C mais csharp me fait des caprices


Je veux dimensionner un tableau de 5 byte et fixer cette longueur a 5 bytes


si je fait
      byte [] sCP=new byte[5]; // c'est bon
// ensuite (lookCP ne fait pas plus de 5 bytes)
      sCP=System.Text.Encoding.ASCII.GetBytes(lookCP);
// la longueur a changé ... soit


// Mais maintenant seuls les 5 premiers bytes m'intéressent, comment je peux supprimer ou ajouter des element a mon array

6 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Bonjour,
Une fois la taille d'un tableau fixée, on ne peut plus la changée (statique).
Il faut alors recopier les éléments dans un nouveau tableau (plus grand ou plus petit selon qu'on veuille l'agrandir ou le rétrécir).

Regarder du côté de la méthode CopyTo de class Array.

<hr />
-My Blog-
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
Merci Bidou

ca c'est pas pratique !!
Ya des choses géniales en cSharp mais parfois il y a des trucs ou il faut bricoler

Exemple lié a ma question, je ne sais pas s'il y a une maniere plus efficace de faire mais ca me semble un peu lourdingue !
Tout ca pour lire une chaine de 5 bytes avec \0 pour la mettre dans un string (c'est surtout le substring que je trouve un peu lourd)

        byte[] xcp = binReader.ReadBytes(5); ;
        string dum = System.Text.Encoding.ASCII.GetString(xcp);
        icp.sCP=dum.Substring(0, 4);
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Je ne pense pas qu'on puisse faire mieux non...
Enfin, pourquoi pas un ReadByte(4) ?

<hr />
-My Blog-
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
Salut

Pourquoi pas un readbyte(4)  ??

Parce que la place reservée dans le fichier est de 5 bytes, donc je dois de toute facon l'avaller !
Je pourrais effectivement faire le code ci apres

        byte[] xcp = binReader.ReadBytes(4);
        byte brol   = binReader.ReadByte();
        icp.sCP    = System.Text.Encoding.ASCII.GetString(xcp);

Mais c'est toujours 3 lignes d'instruction et je pense que l'overhead d'un read est plus lourd qu'un substring mais je suis pas sur.

Je sais que tu va me dire que je pourrais faire

        icp.sCP    = System.Text.Encoding.ASCII.GetString(binReader.ReadBytes(4));

Mais ca deviens moins lisible et je perds un certain controle !!
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Dans ce cas, je ne vois pas mieux...

<hr />
-My Blog-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Salut,

Probablement regarder du côté du C++/CLI...

/*
coq
MVP Visual C#
CoqBlog
*/