|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : String vers structure de char [ Archives / Au secours ] (nico_fip1)
Informations & options pour cette discussion
mardi 14 février 2006 à 12:54:17 |
String vers structure de char

nico_fip1
|
Bonjour, Mon objectif est de gérer fichier texte formaté: Ce fichier contient des enregistrements composé d'une suite de 60 caractères. Mon but est de passer d'une chaine à une structure, dont bien sûr le format global est le même. Exemple struct MaStruct { char info1 ; char info2 ; char info3 ; char info4 ; }
_____________________ string MaChaine="azer" ; MaStruct(=)MaChaine ;
En C++ 6, j'utilisait "memcpy" et ça marchait nickel....lol Merci d'avance Remarque : Le format peut bouger, donc pas envie de passer par MaStruct.info1=MaCaine.SubString(0,1) ; ..... ......
NicoStrasbourg France
|
|
|
mardi 14 février 2006 à 13:28:16 |
Re : String vers structure de char

coq
|
Salut,
Qu'est ce que tu entends au juste par "le format peut bouger" ?
/* coq MVP Visual C# */
|
|
|
mardi 14 février 2006 à 13:36:04 |
Re : String vers structure de char

Lutinore
|
Salut, utilise l'opérateur d'indexation [ ] sur ta chaine pour construire ta structure, non !?
|
|
|
mardi 14 février 2006 à 13:52:56 |
Re : String vers structure de char

nico_fip1
|
En fait, chaque caractère représente une donnée. Pour la suite du traitement, il est beaucoup plus simple d'utiliser MaStructure.Info1 que MaChaine.SubString(0,1) Et si je change la signification d'une info, Il suffit de modifier le nom dans la définition de ma structure. Concernant l'opérateur d'indexation, écrire 60 fois MaStructure.Info1 = MaChaine.SubString(0,1) ; MaStructure.Info2 = MaChaine.SubString(11) ; MaStructure.Info3 = MaChaine.SubString(2,1) ; ..........
C'est un peu lourd, alors qu'il sufit de convertir une chaine de N caractères, en une structure composée de N caractères.
Ca pb va aussi se poser pour les champs de bits. Conversion d'un nombre en une suite de champs de bit. En clair, l'idée est de "caster" un string, ou un tableau de char, en une structure qui contient les mêmes données ; ou caster un nombre "byte" en une structure de N bits.
Ce que je peux dire, c'est qu'en C simple, je n'avais aucun pb.... un memcpy(...) faisait l'affaire .... Donc j'espère qu'en C# c'est aussi faisable !!
Merci beaucoup
Nico Strasbourg France
|
|
|
mardi 14 février 2006 à 15:07:55 |
Re : String vers structure de char

Lutinore
|
Je pense qu'il n'ya pas d'équivalent en code managé.
( tu peux aussi fixer ta chaine en mémoire pour travailler avec un pointeur sur ta chaine. )
// Attention au dépassement !!
string s = "ABCD"; MyStruct m = new MyStruct( );
unsafe { char* p = ( char* )&m; for ( int i = 0; i < s.Length; i++ ) { p[ i ] = s[ i ]; } }
|
|
|
mardi 14 février 2006 à 15:29:36 |
Re : String vers structure de char

nico_fip1
|
Salut Lutinore... Merci pour ta réponse qui me semble pas male. Peux-tu juste me donner des explications, ou un lien, concernant "unsafe" ? Etant un habitué du bon vieux ANSI C, ça me parait intéressant d'inclure ce type de bout de code... Question dépassement, je sais faire gaffe. J'ai eu assez de "core dump" dans ma jeunesse  Eh oui, à la base, je suis électronicien, donc le bas niveau, j'aime bien ça... lol Merci encore et à + P.S : Je n'irai quand même pas jusqu'à l'assembleur NicoStrasbourg France
|
|
|
mardi 14 février 2006 à 15:52:43 |
Re : String vers structure de char

coq
|
Donc si j'ai bien saisis, tu veux que si du jour au lendemain tu changes
struct MaStruct { public char info1 ; public char info2 ; public char info3 ; public char info4 ; }
en
struct MaStruct { public char info1 ; public char info2 ; public char info3 ; public char info4 ; public char info5 ; }
ce soit suffisant pour se mettre à gérer les chaînes de 5 caractères ?
/* coq MVP Visual C# */
|
|
|
mardi 14 février 2006 à 16:01:10 |
Re : String vers structure de char

Lutinore
|
Tu peux utiliser les pointeurs dans du code unsafe, suffit de déclarer la classe, la méthode ou juste un bloc unsafe et de compiler avec l'option unsafe ( Projet->Propriété ) ou -unsafe avec csc.exe. Comme la GC peut deplacer les objets en mémoire faut utiliser le mot clé fixed, sauf là vu que j'utilise un type valeur qui est sur la pile, de toute façon le compilo te previens. [ Lien ]Attention quand même avec les chaines ( extrait MSDN ) : "un caractère Unicode peut être représenté par plusieurs Char."
|
|
|
mardi 14 février 2006 à 18:04:46 |
Re : String vers structure de char

nico_fip1
|
Coq : Non pas vraiment...
Si Info1 devient Dupont1 ... C'est qu'une histoire de noms
Mais en fait, c'est surtout pour simplifier la copie. Comme j'ai dit, un "memcpy" en "ANSI C" est très simple ; et on est très proche du matériel.
Pour moi, il suffirait de "caster" : les données sont les mêmes. C'est juste un autre packaging. C'est comme si tu passes d'un byte, à une structure de 8 bits. c'est beaucoup plus simple à manipuler, et les infos sont exactement les mêmes.
Nico Strasbourg France
|
|
|
mardi 14 février 2006 à 19:42:45 |
Re : String vers structure de char

coq
|
J'avoue que j'ai du mal à saisir le truc là. Pour moi l'autre type naturel d'une chaîne de caractères est un tableau de caractères, pas une structure de caractères.
Si tu veux éviter de multiplier les MaStructure.Info1 = MaChaine.SubString(0,1) ; MaStructure.Info2 = MaChaine.SubString(1,1) ; MaStructure.Info3 = MaChaine.SubString(2,1) ; .......... à chaque utilisation de ta structure dans le code, donne lui un constructeur : struct MaStruct { public MaStruct(string str) { this.info1 = str[0]; this.info2 = str[1]; this.info3 = str[2]; this.info4 = str[3]; }
public char info1; public char info2; public char info3; public char info4; }
D'ailleurs à ce sujet je vais me permettre d'insister sur le point indiqué par Lutinore, l'utilisation de l'indexeur de la structure string. MaChaine.SubString(0,1) ; devient MaChaine[0] ; et devient dont plus court que MaStructure.Info1
Et si tu veux travailler "directement" avec le tableau de caractères, utilise la méthode String.ToCharArray
/* coq MVP Visual C# */
|
|
|
Cette discussion est classé dans : fichier, string, passer, char, structure
Répondre à ce message
Sujets en rapport avec ce message
String et Char[], probleme de caracteres [ par Shouwi ]
Hello, aprés moultes recherches et essais, je n'arrive pas a faire ce que je veux :\Je veux lire un fichier, style ASCII ART, donc avec des caracteres
String manipulation -> char [ par abdoulax ]
Je suis encore un newb en c# et je bloque sur un truc tout con. En fait je voudrai faire un truc similaire au C : string test = "yep"; test[1] = 'a';
convertir un string en color [ par godefrw ]
Bonjour, j'aurais besoin de convertir un string (lu dans un fichier xml), en color (system.drawing.color). cela me permettrait de pouvoir définir la c
Lecture fichier binaire et conversion hexa --> string [ par kineton ]
Bonjour à tous, Je suis développeur en vc++ 6.0 et je commence juste à programmer en C# avec VS.Net.Je cherche à lire un fichier binaire qui contient
nom de fichier [ par GaTaca ]
bonjour a tous, voila je voudrais isoler le nom de fichier a partir d'une chaine contenant le chemin complet du fichierj'ai essayé string path;string[
int (ASCII) to char (ou string) [ par JuS ]
Bonjour amis développeurs cshapriens,Je cherche à récupérer le caractère correspondant à un code ASCII.Comment faire ???//code ASCII du "A"int code =
Conversion String en Char [ par CyKloNe ]
Bonjour,Voila je démarre en C# et je dois faire une appli de formatage de fichier, qui lit des fichiers délimité en entrée. Je doit donc utiliser spli
Convertire Char[] > String [ par welc ]
Hello,J'ai un char[260] qui contient un chemin de répertoir. Donc pour le convertire je procéde ainsi :String monString;monString = System.Text.Encodi
Début difficile en C# [ par PsyCaDi ]
Bonjour,Je viens de passer du VB6 au C# et j'ai pas mal de problèmes!Surtout en ce qui concerne les conversions.Voilà, je voudrais faire:Conversion d'
conversion de char* en C# [ par gwenn035 ]
Bonjour à tous, je debute en C# et en Cpp (je suis plutot Java pour le moment) et j'ai fais une dll en vc++ qui contient une procedure qui a 4 paramèt
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|