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

Qt Discussion :

Problème de conversion d'un QByteArray


Sujet :

Qt

  1. #1
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut Problème de conversion d'un QByteArray
    j'essaie de convertir un QByteArray comprenant 4caractères représentant un nombre au format hexadécimal en short, mais ça ne marche pas avec les nombres négatifs, quelqu'un voit quelque chose qui ne va pas ou a déjà eu le problème?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    qDebug() << "test";
        QByteArray ba;
        ba.resize(4);
        ba[0] = 'F'; ba[1] = 'F'; ba[2] = 'F'; ba[3] = 'F';
        qDebug() << ba;
        bool ok = false;
        qDebug() << ba.toShort(&ok, 16);
        qDebug() << ok;
    Après ce code, ok vaut faux et toShort retourne 0

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Quand tu met 'F' dans QByteArray, pour toi c'est un Byte ou tous est à 1 ou le caractère F ??

  3. #3
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    Ba c'est un caractère F qui représente tous les bits à un du vrai chiffre, mais mon QByteArray vient d'un micro qui m'envoie des nombre de 2octets via un port série sous forme de caractères ascii.

    PS: ça marche très bien comme ça pour les nombres positifs

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    1- dans se cas il te faut convertir ton code hexa en non hexa http://qt.developpez.com/doc/latest/...y.html#fromHex
    2- un short est sur 2 bytes or tu en à 4. y as donc des cas ou il ne sait pas faire.
    Je pense que tu devrais utiliser QDataStream pour récupérer tes nombres.
    http://qt.developpez.com/doc/latest/...#QDataStream-5

  5. #5
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    Hmmm, nan c'est pas ça, ce que je reçoit est une chaine de caractères ascii normaux donc 4caractères représentent 2octets (F = 1111).

    Donc FFFF devrait me donner -1 normalement, FFFE = -2, etc.

    Il n'y a donc pas lieu d'utiliser fromHex ici non?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par haraelendil Voir le message
    Hmmm, nan c'est pas ça, ce que je reçoit est une chaine de caractères ascii normaux donc 4caractères représentent 2octets (F = 1111).

    Donc FFFF devrait me donner -1 normalement, FFFE = -2, etc.

    Il n'y a donc pas lieu d'utiliser fromHex ici non?
    La représentation n'est pas le même.
    Le caractère F n'est pas 1111 en binaire et est sur 8 bits. C'est la valeur en hexa F que correspond à 1111.
    Donc si tu utilise fromHexa sur ton ByteArray, tu devrais te retrouve avec un ByteArray comme tu l'imagine.

  7. #7
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    Returns a decoded copy of the hex encoded array hexEncoded.
    Mais moi il est pas encodé en hexa mon QByteArray, ce sont des caractères encodés normaux qui servent représente l'état de 4 des bits du short que je veux récupérer (c'est le code du micro qui est comme ça, j'y ai pas accès moi^^)

    c'est moi qui m'exprime si mal que ça? parce que la ça commence à me faire flipper

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    ce sont des caractères encodés normaux qui servent représente l'état de 4 des bits du short
    donc c'est une représentation HEXA sous forme de caractère que reçois.
    Si tu met tes caractères dans QByteArray, ton QByteArray est encodé en hexa et il faut revenir en binaire avec le fromHex.

    [edit]
    j'ai rien dit... Ca marche pas comme je pensais.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    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
    #include <QtCore>
     
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
     
        QByteArray ar;
        ar.setNum((short)-1,16);
        ar = ar.toHex();
        QByteArray array ("ffff");
     
        bool ok = false;
        short val = array.toShort(&ok,16);
        unsigned short val2 = array.toUShort(&ok,16);
        int val3 = array.toInt(&ok,16);
     
        return 0;
    }
    Si tu regarde la convertion d'un short = -1 en hexa ar QByteArray, on constate qu'il traille sur 8octets (16 caractère hexa).
    Donc pour lui ffff = 65535 et il ne peut donc le mettre dans un short.

    Trop chelou comme fonctionnement

  10. #10
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    Ouai ba j'ai remarqué ça aussi, donc je l'ai codé à la main, c'est plus simple lol

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par haraelendil Voir le message
    Ouai ba j'ai remarqué ça aussi, donc je l'ai codé à la main, c'est plus simple lol
    ou tu fait toUShgort et tu cast sur un short^^
    C'est pas très bien expliqué comme fonction...

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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