IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Equivalent strLen(char) sous C#


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut Equivalent strLen(char) sous C#
    Bonjour a tous,
    quelqu'un pourrait me dire l'équivalent de ce code en C++ sous C# car je n'arrive vraiment pas a le faire....
    strSegmentFileName = " " + "test";
    strSegmentFileName[1] = strlen((char*)&strSegmentFileName[1]);
    Merci d'avance pour votre aide

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    C'est une transfo de chaine C en chaine Pascal (ou "sbString") ?

    Si c'est ça, un truc comme cela doit le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            public string cStringToPascalString( String cString )
            {
                int cLength = cString.IndexOf( (char)0 );
                StringBuilder sb = new StringBuilder();
                sb.Append( (char)cLength );
                sb.Append( cString.Remove(cString.Length - 1) ); // on vire le caractére nul terminal
                return sb.ToString();
            }
    Si en revanche la chaine d'entrée est de format C# et pas C, ce serait plutôt cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            public string CSharpStringToPascalString( String csharpString )
            {
                StringBuilder sb = new StringBuilder();
                sb.Append( (char)csharpString .Length );
                sb.Append( csharpString );
                return sb.ToString();
            }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    d'une manière générale, en .NET (quel que soit le langage) on utilise la propriété Length de la classe String.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par tomlev Voir le message
    d'une manière générale, en .NET (quel que soit le langage) on utilise la propriété Length de la classe String.
    Oui, mais visiblement, il extrait un bout de C qui à partir d'une chaine C la transforme en chaine Pascal (les chaines en Pascal ont leur longueur définie par le premier octet dans le stockage interne) , donc il doit avoir une raison pour utiliser une telle chaine (entrée d'un automate ?? ou autre), car en C/C++ c'est pas un format standard non plus.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    C'est d'un String CSharp en ShortString Pascal.... Le premier caractere correspondant a la taille de la chaine qui se trouve a l'intérieur... J'ai éssayer ta deuxieme solution mais il envoie :
    par exemple en CSharp : e148C:\TEST
    et ma DLL en Pascal reçoit : 148C:\TEST
    (la chaine était plus grande mais c'est un exemple)
    D'après ce que j'ai crompris, String utilise 2 octets par caractere et char utilise un (je me trompe peut-être).... Alors il fau que je mette dans mon premier octet la taille en Hexa de la chaine qui se trouve a l'intérieur. max 255=FF
    Quelqu'un a une solution?

  6. #6
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    heu...
    BATiViR dit bien que c'est du C++ !?

    Ce code est vraiment bizarre je trouves

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strSegmentFileName = " " + "test";
    strSegmentFileName[1] = strlen((char*)&strSegmentFileName[1]);
    Imaginons que "strSegmentFileName" est un std::string :http://www.cplusplus.com/reference/string/string/

    strSegmentFileName[1] : Il récupére une reférence sur le 2eme caractére (ici 't')

    strlen((char*)&strSegmentFileName[1]) : strlen va retourner le nbr de caractéres à partir de la position 1, ce qui équivaudrait à un "strSegmentFileName.Lenght-1";

    Puis il semble bizarrement, allouer la valeur (qui pourrait dépasser 255) à un char de notre chère strSegmentFileName à la place du 2eme caractére.

    Heu...

    edit: m/.length()/.Length/

  7. #7
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    Citation Envoyé par BATiViR Voir le message
    C'est d'un String CSharp en ShortString Pascal
    D'après ce que j'ai crompris, String utilise 2 octets par caractere et char utilise un (je me trompe peut-être)....
    J'avais un peu le même probléme tout à l'heure, jusqu'à ce que j'utilise StringBuilder au lieu de String côté C#

  8. #8
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    TSalm le programme en C++ fonctionne alors je n'ai pas été chercher plus loin.... Vieux code
    Enfaite la deuxieme solution a Bluedeep fonctionne... J'avais du code qui fesai la merde entre deux Merci a tous! Résolut

  9. #9
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    Bizarre, je ne comprends alors pas pourquoi il alloue la taille de la taille dans le 2éme caractérede la chaîne et pas la 1er ...

    Quel compilateur compile ce code C++ ?

  10. #10
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    C++ Builder 6.... Mais je croix qu'il l'alloue sur le premier octet... Sa fonctionnerais pas autrement

  11. #11
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    et strSegmentFileName est de type 'std::string' ou 'char*' ?

  12. #12
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    String

  13. #13
    Membre éclairé Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Par défaut
    Bon, je ne suis de toute façon pas un pro en C++

    J'ai ouvert un sujet :
    http://www.developpez.net/forums/sho...22#post2905922

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Equivalent de rownum sous SQL server
    Par Isildur dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/07/2009, 15h48
  2. equivalent de ORADIM sous unix
    Par Laye dans le forum Oracle
    Réponses: 3
    Dernier message: 01/12/2006, 08h35
  3. Réponses: 2
    Dernier message: 24/03/2006, 10h46
  4. Equivalent de easyphp sous linux
    Par polace dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 28/02/2006, 14h50
  5. Applicatifs equivalent MS exchange sous linux
    Par MarcG dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 13/04/2004, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo