Integer Wert in Hexadezimal casten?



  • Fujitsu schrieb:

    Ich brauche das schon intern weil eine Windowsfunktion nur ein BYTE akzeptiert, also etwas wie "0x50". Jetzt habe ich aber nur die 80 und muss diese in eben dieses BYTE bekommen.

    Übergib einfach die g10(80), er nimmt sich dann das Zahlensystem, das er will (in diesem Fall wärs dann g16(50)).



  • Ich bekomms nicht gebacken.

    Ich habe einen string:

    string temp = "Hallo";
    

    Jetzt soll für jedes Zeichen eine Funktion aufgerufen werden, die als Parameter ein BYTE (unsigned char) annimmt.

    Beispiel:

    Foo(0x50)  // wäre das P.
    

    Wie bekomme ich das hier hin

    for(int i=0; i<temp.size(); ++i)
        Foo(/*temp.substr(i,i) und weiter ?*/);  // Buchstabe an der Stelle i im string muss in BYTE konvertiert werden
    

    Ich bin da echt ratlos 😕



  • Dein substr(i, i) hat undefiniertes Verhalten. Angenommen der String ist 5 Zeichen lang, also von 0 bis 4, dann ist im fünften Schleifendurchlauf daraus substr(4, 4) geworden. Hinter [4] sind aber keine weiteren 3 Zeichen mehr. Guck dir noch mal die Parameter von substr() an.

    Zu deinem Problem: ein einfaches Foo(temp[i]); reicht.



  • Sorry, aber es klappt nicht (tolle Fehlerbeschreibung ich weiß), aber wenn man es so versucht wie in deinem Beispiel arbeitet die Funktion nicht korrekt 😞



  • Und was heisst "nicht korrekt"? Was macht denn Foo mit dem übergebenen Parameter?



  • Bist du sicher, dass du alles Hexaldezimal behandeln musst?
    Die Send Funktion z.b. aus der Socket Programmierung (WinAPI) will auch alles Byteweise senden, da kann man aber alles als Char-Array übergeben.



  • #include <iostream>
    #include <iomanip>
    #include <sstream>
    #include <string>
    
    int main() {
      int x;
      std::ostringstream sstr;
      std::string s;
    
      std::cin >> x;
    
      sstr << std::hex << x;
      s = sstr.str();
    
      std::cout << s << std::endl;
    }
    


  • Fujitsu schrieb:

    Ich bekomms nicht gebacken.

    Ich habe einen string:

    string temp = "Hallo";
    

    Jetzt soll für jedes Zeichen eine Funktion aufgerufen werden, die als Parameter ein BYTE (unsigned char) annimmt.

    Beispiel:

    Foo(0x50)  // wäre das P.
    

    Wie bekomme ich das hier hin

    for(int i=0; i<temp.size(); ++i)
        Foo(/*temp.substr(i,i) und weiter ?*/);  // Buchstabe an der Stelle i im string muss in BYTE konvertiert werden
    

    Ich bin da echt ratlos 😕

    bin mir nicht sicher ob ich das problem richtig verstanden habe, aber könnte das die lösung sein ?

    for(int i=0; i<temp.size(); ++i)
        Foo( (BYTE)temp[i] );  // Buchstabe an der Stelle i im string muss in BYTE konvertiert werden
    

    Kurt



  • ZuK: Ich nehm doch mal stark an, dass BYTE ein typedef auf char ist (ist ja durch den Standard festgelegt, dass char genau ein Byte groß ist), womit der Cast entfällt und das dasselbe wie mein Vorschlag ist.



  • ich muss zugeben dass ich nach all den diskussionen bis jetzt noch immer nicht verstanden habe wo genau das problem liegen könnte. daher habe ich angenommen es könnte eine warnung wegen signed - unsigned ( BYTE ist als unsigned char definiert, s.o ) sein. daher mein letztes posting.

    btw: was ist eine hex-zahl? eventuell versteht der op darunter unsigned integral typen da diese im debugger meist in der form 0x50 dargestellt werden oder ist doch die string representation gemeint was zb. 0xdeadbeef darunter versteht. ich kann nur raten.
    Kurt



  • ZuK schrieb:

    ich muss zugeben dass ich nach all den diskussionen bis jetzt noch immer nicht verstanden habe wo genau das problem liegen könnte

    Da bist du nicht der einzige. 🙂
    Und 0xdeadbeef's Beispiel steht auch in keinem Bezug, da aus den Aussagen des op imo nicht hervorgeht, dass wirklich eine lexikalische Umwandlung gemeint war.

    ZuK schrieb:

    btw: was ist eine hex-zahl? eventuell versteht der op darunter unsigned integral typen

    Ich glaube, der op hat einfach nur Verständnisprobleme beim Unterschied von Datentyp und Datenformat.


Anmelden zum Antworten