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 772
    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 772
    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 772
    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 772
    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 772
    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 772
    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