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

Contribuez Delphi Discussion :

Ne vous prenez pas les pieds dans les strings


Sujet :

Contribuez Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut Ne vous prenez pas les pieds dans les strings
    Voici un article que j'ai écrit après quelques heures perdues sur un transtypage un peu rapidement fait

    http://lookinside.free.fr/delphi.php...ns+les+strings
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 079
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 079
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Ne vous prendez pas les pieds dans les strings
    prendez c'est fait exprès ? D'autant plus que "là-bas" c'est bien "prenez"...

    Et, à propos de "là-bas", il ne manque pas un « d' », là dans le 2e § ? :
    Les caractères de l'époques étaient toujours codés sur 8bits, pas ambiguïté possible.
    (plus un "s" en trop et une espace en moins, au final : Les caractères de l'époque étaient toujours codés sur 8 bits, pas d'ambiguïté possible.)

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Jipété Voir le message
    prendez c'est fait exprès ? D'autant plus que "là-bas" c'est bien "prenez"...

    Et, à propos de "là-bas", il ne manque pas un « d' », là dans le 2e § ? :
    (plus un "s" en trop et une espace en moins, au final : Les caractères de l'époque étaient toujours codés sur 8 bits, pas d'ambiguïté possible.)
    outre mon français loin d'être parfait, je tape souvent trop vite, les deux ensemble ça donne des résultats assez surprenants parfois
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Article très éclairant en effet. Excellent titre, qui plus est.

    Il y a une petite correction à faire dans le code : StringCodePage au lieu de StringPageCode.

    Autrement, par simple curiosité, quand tu dis qu'à l'offset tant il y a telle donnée, y a-t-il un moyen de le vérifier (par code) ?

    Quand tu dis qu'à l'offset -12 on trouve la page de code, par exemple 1200, je pense que j'ai mal compris la phrase, vu qu'il y a autre chose à l'offset -10 et que deux bits ne peuvent pas suffire à représenter la page de code.

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 746
    Par défaut
    Ton article est un tissu d'erreurs:
    Par exemple:
    • L'ASCII c'est 7 bits (128 valeurs), donc 1 octet
    • Les "code pages" (ou MBCS sous Windows) c'est soit 1 octet (latin-1, latin-9) soit 2 octets (Shift-JIS)
    • Les "code pages" sont compatibles ASCII, parce qu'il ne touchent pas aux 128 valeurs de l'ASCII (ils remplissent le trou 7bits <-> 8bits )
    • Le "code page" ANSI c'est un truc bâtard: c'est le code page par défaut de Windows. Mais il change en fonction de la langue de Windows: latin-1 en France, Shift-JIS au Japon, ...
    • L’Unicode c'est 3 encodages (mais il y en a eu des dizaines) UTF-8, UTF-16 (*) et UTF-32 (*) (*: big et little endian)
    • L'UTF-8, c'est soit 1, 2, 3 ou 4 octets. Il est compatible ASCII
    • L'UTF-16 c'est soit 2 octets (Windows) soit 4 octets (Linux). Il n'est pas compatible ASCII (<- en gros, il rajoute des '0' entre chaque caractères )
    • L'UTF-16 c'est l'encodage de Windows (depuis W2K)
    • L'API Windows W (wide) a un petit nom, et elle permet de rendre compatible le code "legacy" avant W2K

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par foetus Voir le message
    Ton article est un tissu d'erreurs:
    si tu le dis
    Citation Envoyé par foetus Voir le message
    Par exemple:
    • L'ASCII c'est 7 bits (128 valeurs), donc 1 octet
    • Les "code pages" (ou MBCS sous Windows) c'est soit 1 octet (latin-1, latin-9) soit 2 octets (Shift-JIS)
    • Les "code pages" sont compatibles ASCII, parce qu'il ne touchent pas aux 128 valeurs de l'ASCII (ils remplissent le trou 7bits <-> 8bits )
    • Le "code page" ANSI c'est un truc bâtard: c'est le code page par défaut de Windows. Mais il change en fonction de la langue de Windows: latin-1 en France, Shift-JIS au Japon, ...
    • L’Unicode c'est 3 encodages (mais il y en a eu des dizaines) UTF-8, UTF-16 (*) et UTF-32 (*) (*: big et little endian)
    • L'UTF-8, c'est soit 1, 2, 3 ou 4 octets. Il est compatible ASCII
    • L'UTF-16 c'est soit 2 octets (Windows) soit 4 octets (Linux). Il n'est pas compatible ASCII (<- en gros, il rajoute des '0' entre chaque caractères )
    • L'UTF-16 c'est l'encodage de Windows (depuis W2K)
    • L'API Windows W (wide) a un petit nom, et elle permet de rendre compatible le code "legacy" avant W2K
    et en quoi cela contredit mon article ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Bonjour ! Article très éclairant en effet. Excellent titre, qui plus est.

    Il y a une petite correction à faire dans le code : StringCodePage au lieu de StringPageCode.

    Autrement, par simple curiosité, quand tu dis qu'à l'offset tant il y a telle donnée, y a-t-il un moyen de le vérifier (par code) ?
    tu peux le faire comme ceci par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    type
      TStringInfo = record
        CodePage: Word;
        CharSize: Word;
        RefCount: Integer;
        Length  : Integer;
      end;
     
    procedure StringInfo(p: Pointer);
    var
      i: ^TStringInfo;
    begin
      i := p; // l'adresse du premier caractère
      Dec(i); // remonter de SizeOf(TStringInfo) en mémoire
      WriteLn(' CodePage = ', i.CodePage);
      WriteLn(' CharSize = ', i.CharSize);
      WriteLn(' RefCount = ', i.RefCount);
      WriteLn(' Length   = ', i.Length);
    end;
     
    begin
      StringInfo(pointer(Str));
    end;
    mais l'unité System comprend aussi des fonctions pour cela: StringElementSize, StringCodePage, StringRefCount et Length() évidemment

    Citation Envoyé par Roland Chastain Voir le message
    Quand tu dis qu'à l'offset -12 on trouve la page de code, par exemple 1200, je pense que j'ai mal compris la phrase, vu qu'il y a autre chose à l'offset -10 et que deux bits ne peuvent pas suffire à représenter la page de code.

    pas deux bits, deux octets
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    @Paul TOTH, Cirec

    Merci pour les exemples de code.

    Citation Envoyé par Paul TOTH Voir le message
    pas deux bits, deux octets
    Vu.

  9. #9
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Citation Envoyé par Jipété Voir le message
    prendez c'est fait exprès ? D'autant plus que "là-bas" c'est bien "prenez"...

    Et, à propos de "là-bas", il ne manque pas un « d' », là dans le 2e § ? :
    (plus un "s" en trop et une espace en moins, au final : Les caractères de l'époque étaient toujours codés sur 8 bits, pas d'ambiguïté possible.)

    à propos d'orthographe, une espace ??????????????????????????????????????

  10. #10
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 079
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 079
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    à propos d'orthographe, une espace ??????????????????????????????????????
    Absolument !

  11. #11
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Ah ben crotte alors .... Je me coucherai moins bête ce soir

  12. #12
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 910
    Billets dans le blog
    6
    Par défaut
    Ah ben crotte alors
    Attention, méfie-toi ! Il y a très peu d'espace dans un string pour les crottes... D'ici qu'on finisse vraiment par se prendre les pieds dedans...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. enlever les slashes devant les apostrophes dans les mails
    Par laurentSc dans le forum Langage
    Réponses: 10
    Dernier message: 16/11/2010, 18h57
  2. Réponses: 3
    Dernier message: 06/08/2009, 17h09
  3. les classes et les templates dans les plugins
    Par asoka13 dans le forum C++
    Réponses: 22
    Dernier message: 24/01/2008, 17h11
  4. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  5. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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