die hexzahlen wieder
-
-
gibst du mir mal bitte einen Tipp, wie ich das umwandeln soll?
Du lagst mit der Vermutung richtig, dass schon bei der 1. Umrechnung(%X) ein Fehler auftritt.
Wahrscheinlich berechnet mein TR die negative Zahl mit einer Codierung als Dualzahl und über die Bildung des Einerkomplements.Also nicht direkt falsch aber für die Rückumwandlung mit strtol dann wohl doch nicht geeignet.
-
Wenn x negativ ist, dann "-" + hex(-x) nehmen.
Bye, TGGC (Demo or Die)
-
loopy schrieb:
FB2D6E9F entspricht -80908641
aber
04D29161 entspricht +80908641FB2D6E9F + 04D29161 == 0
welch ein zufall. das hat irgendwas mit dem integer-überlauf zu tun und mit der bedeutung von signed und unsigned. und es scheint mir kein fehler zu sein, sondern volle absicht.
vielleicht sind hex-konvertierungen aus alter tradition immer so, daß man unsigned int annimmt. wenn du das dann aber als signed int anzeigst, kommt ne minuszahl raus.
-
hab ich mir nämlich gedacht, dass es dafür nicht einfach eine triviale Lösung gibt...
Nuja wenn euch nochwas einfällt...raus damit

-
Also ich kriegs nicht hin
Ich muss doch aus dem String FB2D6E9F irgendwie wieder -80908641 machen können...?
Bekomme immer nur 4214058655 raus mit:long lDek = strtol(str25, &mystring, 16);Niemand eine Ahnung?
-
War das vorher ein integer-Wert?
Die simpelste Methode wäre es in dem Fall das einer Interger-Variable zuzuweisen. :p
-
string---> -123.456789
atof
Berechnung---> -80908641
Ausgabe Hex mit (%X) ---> FB2D6E9F (das ist auch richtig!!)
zurück in String
irgendwas damit machen
String FB2D6E9F in long int wandeln mit strtol(..........,16);
4214058655 rauskriegen ??????????
4214058655 != -80908641Mir ist bewusst, dass:
F: 15 · 1 = 15
9: 9 · 16 = 144
E: 14 · 256 = 3584
6: 6 · 4096 = 24576
13 · 65536 = 851968
2: 2 · 1048576 = 2097152
B: 11 · 16777216 = 184549376
F: 15 · 268435456 = 4026531840
———————————
4214058655
-
Was ist jetzt überhaupt das Problem
Bye, TGGC (Demo or Die)
-
ich möchte unbedingt den Anfangswert wieder herausbekommen -123.456789 bzw. -80908641 vor der Berechnung.
-
Dann speicher doch einfach eine Kopie der Zahl vor der Konvertierung ab.
Bye, TGGC (Demo or Die)
-
jo genau so mach ichs...

Ich lese einen eeprom aus...und woher soll ich denn wissen was da für eine Zahl rauskommt.
Solang die Zahlen positiv sind, funktionierts ohne Probleme.
Also nochmal die Grundproblematik:
z.b. -1 == FFFFFFFF
-2 == FFFFFFFE
-
Und?
Bye, TGGC (Demo or Die)
-
Denk doch mal nach! Die Werte sind bei jeder Elektronik anders!
Also dann ist es doch totaler Quatsch die Variable vorher zu speichern!
-
#include<cstdio> char text[12]; int num1=1378678,num2; sprintf(text,"%X",num1); sscanf(text,"%X",&num2);
-
Die erste Antwort von Mathias war gut.
#include <stdlib.h> #include <iostream> using namespace std; int main() { char* s = "FB2D6E9F"; char* tmp; long l = strtol( s, &tmp, 16); cout << l << " " << (int)l << endl; }
-
das klappt ja nicht, denn loopy will ja, daß das selbe rauskommt, das auch eingegeben wurde. aber nach konvertierung von FB2D6E9F nach int ist das ergebnis ja negativ.
-
Ich bezog mich auf
Ich muss doch aus dem String FB2D6E9F irgendwie wieder -80908641 machen können...?
Bekomme immer nur 4214058655 raus mit:long lDek = strtol(str25, &mystring, 16);
Niemand eine Ahnung?
-
ach so
na dann stimmts natürlich.
-
cout << l << " " << (int)l << endl;Ausgabe: 4214058655 4214058655
ist das nicht das selbe?
Bekommst du 4214058655 -80908641 raus?