32 Bit Hex in Dez umwandeln

Gast #1719726
Lesenswert?

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?
Angehängte Dateien:
Gast #1719731
Lesenswert?

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)
Gast #1719735
Lesenswert?

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...
Gast #1719757
Lesenswert?

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....
Gast #1719758
Lesenswert?

> 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
Gast #1719777
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren