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 :

Random string en byte?


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Par défaut Random string en byte?
    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
        #include <iostream>
        #include <windows.h>
        #include <string>
        #include <ctime>
        using namespace std;
        int main(){
        int match_aleatoire;
        srand(time(0));
        const string matchs[3] = {"0x82, 0x00, 0x01", "0x01, 0x00, 0x00", "0x01, 0x01, 0x00"};
        match_aleatoire = rand() % 3;
        string match = matchs[match_aleatoire];
     
     
     
     
        BYTE exampleBytes[3] = {match};
        system("pause");
        return 0;
        }
    Bonjour, j'aimerai mettre mon résultat aléatoire string dans exampleBytes[3] Mais j'ai le message d'erreur suivant :
    [Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'BYTE {aka unsigned char}' in initialization
    Comment faire ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    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 759
    Par défaut
    Tu promets de regarder 1 livre sur le C++, parce que cela va faire le 2ième ou 3ième fils de discussion avec juste 1 problème de type

    Le C++ contrairement au PHP a 1 typage statique avec des conversions implicites : il faut l'apprendre et ne plus venir poser des questions sans fin

    Sinon, tu as comme solution
    • std::istringstream. En gros std::istringstream ss(match); BYTE exampleByte; ss >> std::hex >> exampleByte;.
    • std::stoi avec C++11
    • sscanf. En gros BYTE exampleByte; sscanf(match, "%x", &exampleByte);.
    • atoi, c'est du C . Mais ne fonctionne pas avec des chaînes commençant par "0X"/ "0x" (hexadécimal)
    • strtol. En gros char* end; BYTE exampleByte = strtol(match.c_str(), &end, 16);.


    Édit : istringstream, c'est de la grosse m*rd* , il ne fonctionne pas avec 1 chaîne commençant par "0X"/ "0x" (hexadécimal), mais c'est la solution officielle C++03

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Par défaut
    Merci pour ta réponse, et si je mets la chaîne de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const string matchs[3] = {"130, 0, 1", "128, 0, 2", "129, 1, 0"};
    Comment je fais pour mettre le éesultat en byte avec 0x + les virgules ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    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 759
    Par défaut
    Citation Envoyé par KevinDA Voir le message
    "130, 0, 1"
    Ce truc lapin compris c'est censé donner quel nombre ?

    Sinon, si tu as 1 nombre hexadécimal comme 9F, sous forme de chaîne de caractères, mais qui ne commence pas par "0x"/ "0X", il faut juste préciser la base (16 donc)

    Avec mes exemples, std::istringstream, sscanf et strtol devrait fonctionner.
    Avec la fonction atoi tu ne peux pas changer de base et avec std::stoi il faut lire la documentation

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Par défaut
    je l'ai mis de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::istringstream ss(match);
    BYTE exampleByte;
    ss >> std::hex >> exampleByte;
    sscanf(match, "%x", &exampleByte);
    char* end;
    BYTE exampleByte = strtol(match.c_str(), &end, 16);
    et j'ai les erreurs suivantes :

    [Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'int sscanf(const char*, const char*, ...)'
    [Error] redeclaration of 'BYTE exampleByte'
    [Error] 'BYTE exampleByte' previously declared here

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    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
    const string matchs[3] = {"82, 00, 01", "01, 00, 00", "01, 01, 00"};
    match_aleatoire = rand() % 3;
    string match = matchs[match_aleatoire];
    std::vector<BYTE> bytes;    
    std::string input(match);
    size_t count = input.size()/3;
    int match_byte[count];
    for(size_t i = 0; i < count; i++){           
    std::string numStr = input.substr(i * 3, input.find(", "));
    int num = 0;
    sscanf(numStr.c_str(), "%x", &num);
    bytes.push_back((BYTE)num);
    cout << "Teste : " << bytes[i] << endl;
    }
    J'aimerai savoir maintenant comment stocker toutes les variable bytes[i] dans 1 seul variable ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    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 759
    Par défaut
    Dis nous ce que tu veux faire à la fin ?
    Et apprends les bases du C++
    Donne nous 1 code complet à la fin


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #include <cstdlib>
     
    #include <iostream>
    #include <string>
    #include <vector>
     
    typedef unsigned int BYTE;
     
     
    /*****************************************************************************/
    /***********************************  Main  **********************************/
    /*****************************************************************************/
     
    int main(int argc, char** argv)
    {
     
        std::vector<std::string> list_matches = {"82, 00, 01", "01, 00, 00, ff", "01, 01, 00, "};
     
        std::vector<BYTE> list_bytes;
        std::string match_str;
        size_t nb_matches = list_matches.size(), pos, match;
        BYTE byte;
     
        list_bytes.reserve(3);
     
        for(match=0; match < nb_matches; ++match) {
            list_bytes.clear();
     
            match_str = list_matches[match];
     
            pos = match_str.find(", ");
     
            while (pos != std::string::npos) {
                if (sscanf(match_str.c_str(), "%x", &byte) == 1) {
                    list_bytes.push_back(byte);
                }
     
                match_str.erase(0, (pos + 1));
                pos = match_str.find(", ");
            }
     
    //      Extract last byte, if exists
            if (match_str.size() > 0) {
                if (sscanf(match_str.c_str(), "%x", &byte) == 1) {
                    list_bytes.push_back(byte);
                }
            }
     
    //      Display one match
            std::cout << "Match:";
            for(byte=0; byte < list_bytes.size(); ++byte) {
                std::cout << " " << std::hex << list_bytes[byte] << std::dec;
            }
            std::cout << std::endl;
        }
     
     
        return EXIT_SUCCESS;
    }

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2020
    Messages : 51
    Par défaut
    Ok Merci pour vos réponse. Il est très bien ce forum, encore merci pour votre aide.

Discussions similaires

  1. String vers byte[]
    Par EpOnYmE187 dans le forum Langage
    Réponses: 8
    Dernier message: 28/10/2011, 11h23
  2. Réponses: 2
    Dernier message: 06/12/2005, 12h01
  3. [Question] Convertir un String en Byte
    Par WyckiT dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2005, 12h50
  4. [C#] Conversion d'un string en byte[] et inversement
    Par david71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/12/2004, 15h10

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