Dieses Thema gab es hier zwar schon einige Male, wie ich der Suche entnommen habe, aber eine Lösung für mein Problem habe ich nicht gefunden. Mein Messgerät sendt mir über eine Schnittstelle eine Spannung aufgeteilt in 4 Byte. Der Spannungsbereich ist von -10 V bis +10 V. Im Anhang eine Tabelle mit Beispielwerten. Die Bytes liegen mir in insgesamt 4 Integer-Variablen vor. Was muss ich jetzt tun, um in C eine Spannung als Dezimalzahl zu sehen?
In C erstmal garnichts. Solche Konvertierungen von binär nach dezimal ist nur dann überhaupt wichtig, wenn die Werte ausgegeben werden sollen, also z.B. auf ein Display. Dann kann man z.B. über Modulo die jeweiligen Ziffern an den Stellen rausfinden, die interessant sind. (Ich bezweifle, dass du in nV ausgeben willst, geschweige denn das dein ADC überhaupt so genau funktioniert)
Naja, die Messwerte kommen nun einmal so an. Und ich möchte die Messwerte nicht nur auf dem Monitor anzeigen, sondern auch in eine Messdatei schreiben. Mir ist auch nicht ganz klar, warum 0xffffffff ca. -4 nV sind, und 0x00000001 ca +4 nV... Sonst könnte man ja von 0 bis 10V mit Dreisatz arbeiten...
Ich muss die Daten in Diagrammform z.B. mit Excel anzeigen. Da nützen mir 8 Spalten mit Hex-Werten garnichts.... Ich habe das jetzt mal ausprobiert, funktioniert aber nicht: dezimal = -10 printf("Dezimal: %d \t Hex: %x \n", dezimal, dezimal); 0xFFFFFFF6 kommt raus, 0x80000000 sollte es sein....
> Die Bytes liegen mir in insgesamt 4 Integer-Variablen vor.
Unter Beachtung der Enianness in einen 32 bit signed int packen (z.b.
int32_t) und klücklich sein - dann kannst Du auch mit deinem Dreisatz
weiterrechnen :-)
Wenn Du es menschenlesbar darstellen oder (menschenlesbar oder
maschinenlesbar) in eine Datei speichern willst, dafür gibts fertige
Funktionen wie itoa(), ltoa(), [s[n]]printf() - jeweils ggf. vor oder
nach Umrechnung..
HTH
Woher weiß mein Programm, dass FFFFFFFF negativ und 00000001F positiv ist?
> Woher weiß mein Programm, dass FFFFFFFF negativ und 00000001F positiv > ist? Weil der Datentyp (in den Du es geschickterweise verpackst) ★SIGNED★ ist.
wer gibt eigentlich deinem programm die intelligenz etwas zu wissen? du oder wer sonst schreibt das programm?
ich hab dir zum besseren Verständnis mal eben ein kurzes Beispielprogramm zusammengehackt:
1 | $ cat main.c |
2 | #include <stdint.h> |
3 | #include <stdio.h> |
4 | |
5 | |
6 | void zeich_mich_lesbar(int32_t i32Data) |
7 | { |
8 | printf("raw: 0x%.8x menschenlesbar: %d aufgehübscht %eV\n", i32Data, i32Data, i32Data *10.0 /INT32_MAX); |
9 | } |
10 | |
11 | |
12 | int main() |
13 | { |
14 | zeich_mich_lesbar(0x80000000); |
15 | zeich_mich_lesbar(0xFFFFFFFF); |
16 | zeich_mich_lesbar(0x00000000); |
17 | zeich_mich_lesbar(0x00000001); |
18 | zeich_mich_lesbar(0x7FFFFFFF); |
19 | |
20 | return 0; |
21 | } |
22 | $ gcc -Wall main.c -o main |
23 | $ ./main |
24 | raw: 0x80000000 menschenlesbar: -2147483648 aufgehübscht -1.000000e+01V |
25 | raw: 0xffffffff menschenlesbar: -1 aufgehübscht -4.656613e-09V |
26 | raw: 0x00000000 menschenlesbar: 0 aufgehübscht 0.000000e+00V |
27 | raw: 0x00000001 menschenlesbar: 1 aufgehübscht 4.656613e-09V |
28 | raw: 0x7fffffff menschenlesbar: 2147483647 aufgehübscht 1.000000e+01V |
(Wie immer) alles eines Sache der Interpretation ;-) HTH und HF
>Woher weiß mein Programm, dass FFFFFFFF negativ und 00000001F positiv >ist? Sorry, wie willst du ein C-Programm schreiben, wenn du nicht mal die elementarsten Grundlagen verstanden hast? http://www.ulthryvasse.de/
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.