Eingegebenen Satz in Hex umwandeln - c++



  • Hallo zusammen,

    ich suche eine möglichkeit wie ich eine Texteingabe in der console zu hex zahlen umwandeln kann.
    bis jetzt habe ich nur möglichkeiten gefunden 1 zeichen / 1 wort in hex umzuwandeln...

    ich stelle mir genau sowas vor (text -> hex reicht erstmal):
    http://www.canfieldstudios.com/flashmx/asc2hex/index.html

    ohne 0x und eigendlich brauche ich auch keine weitere wiederausgabe( prinft oder cout) des textes als hex - es reicht völlig wenn ich den eingegebenen text dann als eine variable weiter an mein programm geben kann..

    :xmas2: so jmd ne idee? 😃

    danke ffür alles



  • Du meinst, dass du eine dezimale Zahl als String vorliegen hast, die du dann in Hex umwandeln und nicht mehr ausgeben willst? Du willst nur als numerische Variable weiter damit arbeiten? Dann brauchst du da nix umwandeln. Eine Zahl ist eine Zahl, egal wie du sie notierst.

    Das hier ist kein Unterschied:

    int i=10;
    int i=0xa;

    Wenn ich dich falsch verstanden habe und du einen String mit hexadezimaler Zahl vorliegen hast, kannst du z.B. mit strtol einen long-Wert daraus machen.



  • _matze schrieb:

    Du meinst, dass du eine dezimale Zahl als String vorliegen hast, die du dann in Hex umwandeln und nicht mehr ausgeben willst? Du willst nur als numerische Variable weiter damit arbeiten? Dann brauchst du da nix umwandeln. Eine Zahl ist eine Zahl, egal wie du sie notierst.

    Das hier ist kein Unterschied:

    int i=10;
    int i=0xa;

    Wenn ich dich falsch verstanden habe und du einen String mit hexadezimaler Zahl vorliegen hast, kannst du z.B. mit strtol einen long-Wert daraus machen.

    also die sache ist die ich möchte folgendes:

    ich gebe einen text in die console ein zb:

    " Hey du - danke das du mir hilfst! "

    dann soll das programm einfach den oberen text als eine variable abspeichern die so aussehen sollte "48 65 79 20 64 75 20 2D 20 64 61 6E 6B 65 20 64 61 73 20 64 75 20 6D 69 72 20 68 69 6C 66 73 74 21" ya das wäre es dann ... wie ich die variable dann weiter verarbeite denke ich bekomme ich hin



  • Du willst also die numerischen Werte der einzelnen Zeichen haben, richtig? Dann speicher das Ganze einfach in einem char-Array ab! char ist ein numerischer Typ. Ein Array {'A','a'} ist gleichbedeutend mit einem Array {65,97} (oder eben {0x41,0x61}).

    char str[34]="Hey du - danke das du mir hilfst!";
    
    //das gleiche:
    
    char str2[34]={0x48,0x65,0x79,0x20,0x64,0x75,0x20,0x2D,0x20,0x64,0x61,0x6E,0x6B,0x65,0x20,0x64,0x61,0x73,0x20,0x64,0x75,0x20,0x6D,0x69,0x72,0x20,0x68,0x69,0x6C,0x66,0x73,0x74,0x21,0x0};
    

    EDIT: Zeig doch einfach mal, was du bisher hast.



  • std::string text = ...;
    std::string hex;
    hex.reserve(text.size() * 2);
    for (size_t i = 0; i < text.size(); i++)
    {
        char buffer[8];
        sprintf(buffer, "%02x", text[i]);
        hex += buffer;
    }
    // in "hex" steht jetzt der hex-formatierte text
    // kontrollausgabe:
    std::cout << hex;
    

    EDIT: hatte "buffer" als 1. Argument bei sprintf vergessen



  • ... oder siehe auch hier



  • ich danke euch!



  • hustbaer schrieb:

    std::string text = ...;
    std::string hex;
    hex.reserve(text.size() * 2);
    for (size_t i = 0; i < text.size(); i++)
    {
        char buffer[8];
        sprintf(buffer, "%02x", text[i]);
        hex += buffer;
    }
    // in "hex" steht jetzt der hex-formatierte text
    // kontrollausgabe:
    std::cout << hex;
    

    EDIT: hatte "buffer" als 1. Argument bei sprintf vergessen

    oh man ich reiss mir bald die haare raus >.<- ich sags euch ....

    es ist erstmal echt klasse eure antworten - aber ich drücke mich wohl einfach zu doof aus ....

    ich möchte einen random text in die console eingeben der dann als hex auf irgendeiner variablen x gespeichert wird. ich will weder die hex zahlen sehen noch sonst was... ich brauche einfach den sinnlos eingeben text als hex auf einer variablen...

    bei dem makierten qoute habe ich desweiteren das problem - die eingabe in der console auf std::string text = eingabe ; zubekommen - mit "char eingabe;" geht es nicht ...oh man bald habe ich keine haare mehr aufn kopf :xmas2:



  • äh. du musst ja nix ausgeben, in "hex" steht's ja "auf einer variable" (wie du sagst).

    was den input angeht: std::cin verwenden?



  • #include <iostream>
    #include <iterator>
    #include <sstream>
    
    using namespace std;
    
    void main()
    {
    std::string text;
    std::cin >> text;
    std::string hex;
    hex.reserve(text.size() * 2);
    for (size_t i = 0; i < text.size(); i++)
    {
        char buffer[8];
        sprintf(buffer, "%02x ", text[i]);
        hex += buffer;
    }
    // in "hex" steht jetzt der hex-formatierte text
    // kontrollausgabe:
    cout << hex;
    system("Pause");
    }
    

    so okay .. hab mich schon an nem array und so versucht - weil atm "übersetzt" er ja nur ein wort bzw eine zeichenkette ohne leertaste und so

    ..ich bastel mal weiter

    habe da noch so ne source

    #include <iostream>
    #include <iterator>
    #include <sstream>
    
    using namespace std;
    
    int main()
     {
      cout << hex << showbase;  //showbase für 0x
      copy(istream_iterator<char>(cin),istream_iterator<char>(),  ostream_iterator<int>(cout," "));
      cout << endl;
      system("Pause");
    }
    

    doch kenne ich mich nicht so wirklich mit streams aus ....
    wenn ich zB für ostream_iterator<int>(cout," ") das mache ostream_iterator<int>(abc," ") und abc vorher als int deklariert habe -> Error 😃
    und kA warum ...



  • IIRC gibt's eine Freie Funktion namens "getline" die du verwenden kannst um eine ganze Zeile (inklusive Leerzeichen etc.) einzulesen.


Anmelden zum Antworten