Conversion byte en string et inversement

Signaler
Messages postés
17
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
9 juillet 2008
-
Messages postés
3
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
1 mars 2010
-
Bonjour à tous,

Voila, je debute en C#, et j'aurais besoin de convertir un tableau de byte en string (et inversement):
Pour la conversion byte --> string voici mon code :

  byte[] type_msg = new byte[4];
            type_msg[0] = 0x08;
            type_msg[1] = 0x07;
            type_msg[2] = 0x06;
            type_msg[3] = 0x05;
  string tata = Encoding.ASCII.GetString(type_msg);
  MessageBox.Show(tata);

Et dans ma message box, j'ai des carrés!

Ensuite, pour la conversion String --> byte, voici mon code:

 string allo = "allo";
 byte[] tt = System.Text.Encoding.ASCII.GetBytes(allo);
 MessageBox.Show("" + tt);

Et la, dans ma message box, il m'affiche System.Byte[]...

Pouvez vous m'aider s'il vous plait??
Merci d'avance
tomtom
A voir également:

9 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Salut,

La représentation "System.Byte[]" dans le MessageBox est tout à fait normale vu que l'implémentation de la méthode ToString utilisée dans le code "MessageBox.Show("" + tt);" (au passage, beuark ! => MessageBox.Show(tt.ToString());) est celle de Object, qui justement ne fait que retourner le nom du type obtenu via RuntimeType.ToString()

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
17
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
9 juillet 2008
2
Ok,merci pour cette precision, amis que dois je faire alors, car MessageBox.Show(tt.ToString()) me renvoi aussi "System.Byte[]"...et pour la conversion dans l'autre sens avez vous une idee...?
Merci bcp

tomtom
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Heu oui je n'ai jamais dit que ToString allait avoir un comportement différent mais que c'était cette méthode là qui était de toute façon utilisée par ton code.

Le MessageBox n'est à mon sens pas le meilleur moyen d'afficher le contenu d'un byte[], mais si tu le veux vraiment tu n'as d'autre choix que de batir ta chaine toi même .
Exemple vite fait (à afffiner et stabiliser) :
private String BuildByteArrayString(Byte[] array)
{
    StringBuilder sb = new StringBuilder(array.Length * 8);



    foreach (Byte currentByte in array)
    {
        sb.AppendFormat("[0x{0:X4}]", currentByte);
    }



    return sb.ToString();
}





Concernant le premier point je n'avais pas vu que c'était une question, et de toute façon je doute que MessageBox soit capable d'afficher les caractères que tu lui as donner, les 2 dernières doivent être imprimables dans la console mais les 2 premiers j'ai comme un doute vu qu'il s'agit de BS et BEL.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
17
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
9 juillet 2008
2
Ok, ca marche, merci beaucoup!
Pour le premier cas maintenant (conversion byte--> string) en fait je dois l'afficer dans une textBox...mais j'imagine que le probleme est le même que pour une MessageBox...?
Pouvez vous m'aider?
Merci bcp d'avance!
tomtom
Messages postés
17
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
9 juillet 2008
2
Bonjour,

En fait, pour la conversion byte--> string, si j'affiche dans une console, j'ai les bons "resultats" et pas des petits carrés, mais moi, je voudrai (je dois surtout) afficher ce resultat dans une textBox...Une idee?
Merci bcp!

tomtom
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Salut,

Oui : trouver et utiliser une font "ASCII".

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
17
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
9 juillet 2008
2
Heuu...c'est-à-dire?
Pourrais tu me donner un exemple appliqué à mon pb si cela ne te derange pas, car je n'ai pas encore assez de "niveau" il me semble pour y arriver!
Merci d'avance
tomtom
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

Detrompes moi si je n'ai pas compris, pour ta conversion byte -> string

tu as un byte[] de ce type là par exemple : {00,A9,CD}
et tu veux obtenir une string : "00-A9-CD" (ou sans les tirets)

pour faire ca j'avais utilisé
private string[] getByteStringFromByteArray(byte[] value)
        {
            // Conversion of the byte array to a string
            String infos = BitConverter.ToString(value);

            // a char array to use the "-" caracter as a separator
            char[] tiret = new char[1];
            tiret[0] = '-';
            return infos.Split(tiret);
        }
dans ma fonction, ma String "infos" a donc la forme que j'ai montrée un peu plus haut, et je retourne un tableau de string du type {"00","A9",CD"}

c'est ce que tu voulais avoir ou pas du tout ?
Messages postés
3
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
1 mars 2010

Bonjour
J'ai un petit souçi et je voudrais avoir votre avis.
Je dois récupérer la mac adresse d'un terminal qui a un OS Windows Mobile 6.1.
Le fabricant me met à disposition une référence .net que j'importe sans problème.

Mon problème est le suivant:

- Le fabricant me donne la doc suivante:

GetMac (C++)

Gets the radio's MAC address. You must call RadioConnect before calling this function.

UINT GetMac(TCHAR *MACaddress );

Parameters

MACaddress

Pointer to a TCHAR array indicating the MAC address of the radio (xx-xx-xx-xx-xx-xx).

TCHAR n'existant pas sous visual c#, j'ai donc traduit comme suit:

byte[] our_mac = new byte[128];
uint i;
string s;

l'appel de la fonction: et j'ai utilisé vos recommandations dans ce topics:

i = WLAN80211API_v3.GetMac(our_mac);
String infos = BitConverter.ToString(our_mac);
char[] tiret = new char[1];
tiret[0] = '-';
return infos.Split(tiret);

Je récupère la valeur system.string[]

Avez vous une idée?

Merci d'avance