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

Langage C++ Discussion :

fonctions qui calculent le nombre d'octets d'un caractères


Sujet :

Langage C++

  1. #1
    Membre actif
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2012
    Messages : 51
    Par défaut fonctions qui calculent le nombre d'octets d'un caractères
    Bonjour,
    Qeulqu'un à une idée sur une fonctions qui calculent le nombre d'octets d'un caractères
    Merci d'avance.
    Remarque : je parle d'un caractère et non pas d'une chaîne de caractère

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Tu parles des char, wchar_t, etc ?

  3. #3
    Membre actif
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2012
    Messages : 51
    Par défaut
    je parle de char en fait j'utilise comme encodage UTF8
    OS: ubutuen fait j'ai besoin de savoir la taille d'un séparateur, j'utilise comme
    séparateut ¤ , ; .......
    par exemple le caractère ¤ est code sur 2 bytes
    ya t'il une fonction qui me permet d'avoir la taille de ¤ .
    ???

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    sizeof()

  5. #5
    Membre actif
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2012
    Messages : 51
    Par défaut
    A oublier sizeof car sizeof(¤) = 4, alors que ¤ code sur 2 bytes pour l'UTF8
    tu peut teste sizeof("abc¤") = 6
    par contre sizeof('¤') = 4????????????

  6. #6
    Membre émérite
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Par défaut
    c'est normal car sizeof('a') retourne la taille que la constante 'a' et une constante est codée sur 4 octets d'où ton sizeof = 4

  7. #7
    Membre éprouvé Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Par défaut
    Salut,

    Tu peux aller voir du côté de glib:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <glib.h>
    /* ... */
    char const* String="¤";
    char* Next=g_utf8_offset_to_pointer(String, 1);
    int Bytes=Next-String;
    mais c'est du C.
    En C++, tu peux aller voir du côté de glibmm:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <glibmm/ustring.h>
    // ...
    Glib::ustring String="¤";
    int Characters=String.length();
    int Bytes=String.bytes();
    Tu peux aussi aller voir du côté de iconv, ou si tu veux réinventer la roue, du côté de la définition de l'Utf8 pour te faire ta propre fonction.
    Par contre, je pense que tu dois manipuler les caractêres UTF-8 en tant que chaînes de caractères ("…"), pas en tant que constante caractères('…') pour que les caractères multi-octets soient bien gérés.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Norme du C++, §6.4.4.4, paragraphe 10:

    "An integer character constant has type int. The value of an integer character constant containing a single character that maps to a single-byte execution character is the numerical value of the representation of the mapped character interpreted as an integer."

    Ton litéral chaîne est converti en int, pas en char, ou wchar_t, ou autre...

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Reste à savoir pourquoi Nouri veut calculer la taille:
    1) stockage en tant que char en C++=> réponse d'oodini
    2) buffer pour stocker la représentation UTF-8 ==> glibmm apparament. Cependant, on peut se demander si dans ce cas il ne vaut pas mieux aller plus loin et utiliser la lib pour toutes les manipulations==>plus besoin de calculer la taille car la lib va gérer...
    3)

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    A lire la norme de C++11, je ne suis pas sûr que ce que j'ai indiqué plus haut soit encore rai en C++11.

    En C++11, on peut d'ailleurs spécifier un encodage pour un litéral :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto pouet = u8"pouet";
    Le type sera const char *.

    Pour l'instant implémenté sur gcc, mais pas sur Visual C++.

Discussions similaires

  1. Réponses: 12
    Dernier message: 10/05/2013, 16h45
  2. fonction qui calcule le nombre de checkbox cochés
    Par namstou3 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2007, 14h55
  3. Fonction qui compte le nombre de jours ouvrés par mois
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/07/2006, 16h32
  4. fonction qui transforme un entier en octet
    Par personne64 dans le forum C
    Réponses: 43
    Dernier message: 10/05/2006, 16h36
  5. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 12h00

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