Integer Wert in Hexadezimal casten?
-
Hallo!
Gibt es irgendeine Funktion die mir aus einem Integer einen unsigned char (also hexadezimal) macht?
Beispiel:unsigned char ToHex(int value);
unsigned char test = ToHex(80);test wäre dann 0x50.
Danke!
-
Soweit ich weiß enthält die Standardbibiothek keine derartige Funktion. Musst dir halt eine selber schreiben. (Sollte aber nicht zu schwer sein ;))
Ansonsten wäre halt noch eine Frage wozu du denn den Hex-Wert brauchst. Abgesehen von der Ausgabe einer Hexadezimalen Zahl kann ich mir nämlich nicht vorstellen das du eine brauchst. (Der Computer rechnet intern ja binar).
Um eine Zahl hexadezimal auszugeben, schreibst du z.B.
int var = 99; std::cout << hex << var << std::endl; // 99 hexadezimal
(Ist einfacher als sich dafür eine extra-Funktion zu schreiben :))
Caipi
-
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.
-
Fujitsu schrieb:
Hallo!
Gibt es irgendeine Funktion die mir aus einem Integer einen unsigned char (also hexadezimal) macht?
Da liegt ein Missverständnis vor. Du kannst einer Variable kein Zahlensystem zuordnen. chars werden binär gespeichert, du kannst aber auch ganz leicht im 8-, 10- und 16-System draufzugreifen. Mit ein bisschen mehr Aufwand kannst du auch das 23-System benutzen.
-
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.