Hallo, ich habe Probleme mit einer Umwandlung. Ich möchte 2 Charwerte in der Form <wert1><wert2> zusammen fassen. Dabei ist in wert1 das höherwertige byte. Bei dem zusammengefassten handelt es sich dann um ein unsigned Integer. Damit wird nun ein double geladen. Leider sind alle meine Versuche darauf hinaus gelaufen das im Double am ende die signed interpreation meiner Zahl steht steht. Ich schließe daraus das der Cast vom zusammengesetzten (u)int16 zu double nicht funktioniert. Habe schon viele Varianten ausprobiert die alle zum gleichen Ergebnis geführt haben. Könnte mir jemand ein beispiel Zeigen wie man es richtig macht? Danke
Zahlenverdreher schrieb: > Habe schon viele Varianten ausprobiert die > alle zum gleichen Ergebnis geführt haben. dann zeige doch mal wie du es gemacht hast.
char wert1=0; char wert2=0; double wert3; ... ... wert3 = ((unsigned int)(((unsigned int)wert1<<8) | wert2));
Ok, dann begebe ich mich mal weiter auf die Fehlersuche. Danke für den tipp. Die seite ist cool. auch dafür danke
Lothar Miller schrieb: > Der Code geht tadellos: http://codepad.org/HxpsyM76 > Du hast also ein anderes Problem... scheinbar nicht wirklich, teste mal mit 200, 200 http://codepad.org/AshCkM4O
Peter II schrieb: > scheinbar nicht wirklich, teste mal mit 200, 200 > > http://codepad.org/AshCkM4O gut es fehlte das unsigned vor dem char.
Peter II schrieb: > scheinbar nicht wirklich, teste mal mit 200, 200 char ist per default signed. Das wirkt sich offenbar irgendwie ungünstig aus... http://codepad.org/jTyw1Cg6 Peter II schrieb: > gut es fehlte das unsigned vor dem char. Dass das der Cast nicht gepackt hat, wundert mich...
Lothar Miller schrieb: > char ist per default signed. nein ist es nicht, es ist eventuell bei gcc irgendwo so. Im C standard ist es nicht definiert.
Lothar Miller schrieb: >> gut es fehlte das unsigned vor dem char. > Dass das der Cast nicht gepackt hat, wundert mich... Bei einem Cast auf einen größeren Typ entscheidet die Signedness des Ausgangs-Typs darüber, ob eine Sign-Extension stattfindet. Die Signedness des Ziel-Typs ist dabei irrelevant.
Peter II schrieb: > nein ist es nicht, es ist eventuell bei gcc irgendwo so. Im C standard > ist es nicht definiert. Das bedeutet aber nicht, dass es "undefined" ist. Der Standard sagt, es ist "implementation-defined", er reicht die Verantwortung also einfach weiter. Das bedeutet, dass die Signedness eines char sehr wohl immer definiert ist, nur eben nicht vom Standard, sondern vom jeweils verwendeten Compiler.
In a Nutshell: Wenn man es mit Bytes zu tun hat, dann ist plain vanilla char der falsche Datentyp. unsigned char ist der Typ der Wahl.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.