Convertir des valeurs Hexadecimales,en celles corespondantes en Sting,integer,ou

Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011 - 7 juin 2011 à 08:43
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011 - 9 juin 2011 à 08:29
en fait jŽavais un logfile, que jŽai decodé,en lisant son contenu un byte apres byte. Et par la suite jŽai converti mon array de byte dans lequel je lŽavais sauvegarder en valeur hexadecimal,et rangé dans un stringbuilder. Mais now mon probleme est le suivant,comment passer du texte en valeurs hexadecimal,aux valeurs normales vu que le texte dŽorigine avant dŽetre codé en logfile contenait des valeurs de type Integer,float, et des string. Et je voudrais donc savoir comment faire pour obtenir ces differentes valeurs a partir des valeurs(Hexadecimales) contenues dans mon Stringbuilder

13 réponses

StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
7 juin 2011 à 16:30
Alors j'ai travaillé toute la journée la dessus, tu as de la chance ^^

Mais... j'ai pas tout a fait compris ce que tu voulais...

Mais si jamais tu peut prendre les valeurs en hexadécimal, tu peux faire comme ça :

            //Alors ici je crée un string et
            //les valeurs en hexadécimal.
            //Dans ton cas, tu les as, pas la peine
            //de les créer.

            string Phrase = "";

            char[] Trame = new char[10];
            Trame[0] = (char)0x40;
            Trame[1] = (char)0x41;
            Trame[2] = (char)0x42;
            Trame[3] = (char)0x43;
            Trame[4] = (char)0x44;
            Trame[5] = (char)0x45;
            Trame[6] = (char)0x46;
            Trame[7] = (char)0x47;
            Trame[8] = (char)0x48;
            Trame[9] = (char)0x49;

//Ici, j'assemble le mot
//(Je converti les chars en string)

            for (int i = 0; i < 10; i++)
            {
                Phrase += Trame[i];
            }

            textBox1.Text = Phrase;


Voila, donc je ne sais pas si c'est ça que tu cherchais, mais c'est ce que j'ai compris ^^
Si ce n'est pas ce que tu voulais, peut tu expliquer plus clairement ton problème ? :)
0
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011
8 juin 2011 à 08:52
Slt,
je voudrais savoir STP est ce quŽil est possible,rien que par la lecture des bytes sauvergardes dans mon Array de byte de determiner au prealable a quelle type(integer,float,char) on a affaire???,ou encrore mieux,serait il possible,a la lecture dŽune valeur Hexadecimal,de savoir si le type(integer,float,char) auquel on a affaire.
Merci dŽavance
0
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
8 juin 2011 à 09:35
Disons qu'un octet est une valeur.
Je m'explique, l'octet 0x30 est le chiffre '0'. Il peut faire partie d'un string, int, float ou même un char...

Donc, je ne pense pas que l'on puisse savoir le type a partir d'un octet...


Celui qui n expérimente rien ne se trompe qu'une seule fois.
0
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011
8 juin 2011 à 09:48
OK merci la cŽest plus clair,mais alors la je ne suis pas sorti de lŽauberge,en fait jŽai recu comme projet de stage de develloper une application qui permet de visualiser les donnes emmises par des regulateurs dŽenergie solaire,les données emmises sont sauvegardes dans des logfile(fichiers codés: binaire logfile,csv logfile,asc|| logfile),je suis censés les decodés,les lire,enfin de pouvoir en faire pour lŽutilisateur des representation graphique representant des variations de mesures sur un axe de temps,mais le truc dans lŽhistoire cŽest que les dites données sont emmiŽses toute les seconde,cequi rend les fichier a etudier extremement long,et pres impossible,lŽutilisation de tte les valeurs pour le tracer de la courbe,et renvoit a lŽhypothese de lŽutilisation des valeurs de manieres sequentielle pour le tracer.
Merci de mŽaider,ou encore mieux me donner un processus de solution
0

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

Posez votre question
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
8 juin 2011 à 09:53
Après, ce que tu peux faire est de déchiffrer les données qu'envoie les régulateurs d'énergie solaire.
Ca va te donnée une idée plus clair de ce qui est envoyer.

Et si les trames sont toutes les mêmes ( enfin quand je dis les mêmes, c'est plutôt les données sont données dans le même ordre), tu peux procédé à une découpe des trames, ce qui te permettra de restituée les données par la suite.


Celui qui n’expérimente rien ne se trompe qu'une seule fois.
0
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011
8 juin 2011 à 10:03
les données ont deja été decodé,mais mon souci en fait cŽest que elles ont été lu sous la base de byte,et par la suite converti en Hexadecimal et toute rangées dans un stringbuilder,et cŽest la tout mon probleme,comment recuper les valeurs hexadecimale dans le stringbuilder,et les transformées en valeurs utilisable(pour le tracer des courbes) voici un bout de mon code regarde le et dit moi ce que tu en pense,et merci encore pour ton aide // Function wo Convert Byte Array into String builder
public static string BytesToHex(byte[] bytes)
{
StringBuilder hexString = new StringBuilder(bytes.Length);


for (int i = 0; i < bytes.Length; i++)
{



hexString.Append(bytes[i].ToString());






}
MessageBox.Show(hexString.ToString());
return hexString.ToString();

}
// Function who read to end Logfile and save it in Byte Array
public static byte[] ReadFile(string filePath)
{

byte[] buffer;
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
try
{
int length = (int)fileStream.Length; // get file length
buffer = new byte[length]; // create buffer
int count; // actual number of bytes read
int sum = 0; // total number of bytes read

// read until Read method returns 0 (end of the stream has been reached)
while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
sum += count; // sum is a buffer offset for next reading

//for (int i = 0; i < fileStream.Length; i++)
//{
// MessageBox.Show("Buffer[i] =" + i);
// MessageBox.Show(buffer[i].ToString());



//}

}
finally
{
fileStream.Close();
}
return buffer;




}

private static String ByteToChar(byte[] source)
{
Char []CharString = new Char[source.Length];
int []TempVal = new int[source.Length];
for(int i = 0; i< source.Length; i++)
{

StringBuilder Temp = new StringBuilder(source.Length);
Temp.Append(source[i].ToString("X2"));// that is the place wo make trouble
String STR = Temp.ToString();
MessageBox.Show(Temp.ToString());

for (int j = 0; j
0
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011
8 juin 2011 à 14:39
quelquŽun pourrait il mŽaider a sortir de cette situation sŽil vous plait.
Merci dŽavance
0
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
8 juin 2011 à 15:42
Désolé mais je ne mis connais pas du tout en stringbuilder et en file stream :s

Quelqu'un d'autre devra s'en occuper car j'en suis incapable...

Bonne chance


Celui qui n expérimente rien ne se trompe qu'une seule fois.
0
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011
8 juin 2011 à 15:52
ok il ya pas de souci
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
8 juin 2011 à 20:05
Bonjour,
tu dis que tu a un csv logfile, ce fichier n'est il pas en ASCII séparé par des ; ou des ,?
Auquel cas il y a beaucoup plus simple.
Commence par essayer d'en ouvrir un avec Excel ou wordpad.
Si avec Excel tu te retrouve avec des colonne dont le contenu est lisible et numérique c'est bon signe. Si chaque colonne contient toujours le même type de valeur alors tu as ta structure (ex colonne 1 int, 2 double ect....). Il peut y avoir une ou plusieurs ligne d'entête.

Si c'est bon tu as là quelques exemples de lecture de csv:

Exemple 1

Exemple 2

Exemple 3

Pour l'affichage graphique, il existe un outils magique:
ZedGraph

Whismeril
0
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011
8 juin 2011 à 20:32
Merci deja pour les liens,ils m´ont l´air assez interessant.Concernant les graphiques avec l´utilisation de Zedgraph,moi egalement j´y avais pensé,mais juste maniere superficielle.Je trouve l´ utilisation d´excel,assez problematique pour les fichiers binaire logfiles,et Asc|| logfile,car les données deja dans ces deux cas sont sauvegardes de maniere automatique par le logiciel de regulateur d´energie solaire dans un fichier texte,qui pourrait s´averer etre superbement long,aussi que depassant la limite de grandeur des tableaux sur Excel.donc la dessus je chercherais une autre alternative de solution. Merci encore

Ps: que me conseillerais vous comme structe pour mes classes??
moi j´ai pensé a un classe mere Logfile que je specialiserai par la suite en 3 sous classes a savoir,la classe csvlog,la classe binairelog,et la classe ASClog.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
8 juin 2011 à 22:37
Je ne suis pas le mieux placé pour te conseiller sur ta structure, ni dans ta conversion byte -> hexa -> valeur exploitable.
Le passage par l'hexa est il obligé?
Quand à ma proposition d'ouvrir un csv avec Excel, c'est juste pour voir s'il y a une structure dans le fichier, tu peux essayer avec WordPad.

Si à chaque fois on te fourni les 3 formats de fichiers, que les données sont identiques, peut être peut tu choisir de n'en traiter qu'un et celui qui te parait le plus simple à coder?

Whismeril
0
Rminator Messages postés 12 Date d'inscription mardi 17 mai 2011 Statut Membre Dernière intervention 15 juin 2011
9 juin 2011 à 08:29
ha dŽaccord,le passage par lŽhexa est obligatoire,vu les valeurs sont tout dŽabord convertis en Hexa,et par la suite codée en binaire.


Merci et boe journée
0
Rejoignez-nous