3 hex werte in dezimalwert umwandeln

Gast #2425700
Lesenswert?

Hallo zusammen,
ich habe 3 hexwerte in einem Array.
dat[0]=0x71
dat[1]=0x10
dat[2]=0x95 und möchte diese in einen Dezimalwert umwandeln. Es müsste 
also 7409813 ergeben. Ich erhalte jedoch 4245.
Ich hätte gedacht dass ich jeweils die Bits um 8 Stellen shiften muss. 
Im Internet habe ich aber etwas anderes gefunden was ich aber leider 
nicht verstehe und wohl auch nicht richtig umgesetzt bekomme. Vielleicht 
kann mir jemand weiterhelfen. Die wichtigen Stellen im Code habe ich mit 
Bemerkungen versehen. Ich hoffe die Infos sind ausreichend.
Gruß
Holger

Mein Code
1
 
2

3
unsigned char data[100],dat[6], a=0,b=0,c=0,d=0;
4
unsigned char wert[50];
5

6
while(1)
7
{ 
8
   a++;
9
   data[a] = uart_getchar();
10

11
if (data[a] == 0xFF && data[a-1] ==0x00 && data[a-2] ==0x08 && data[a-3]==0x01) 
12
  {
13
   b=1;
14
   a=5;
15
  }
16
if (b ==1 && data[a] == 0x69)
17
  {
18
   c=1;
19
  }
20
if (c ==1 && data[a] != 0x00 && data[a] != 0x01 && data[a] != 0x69)
21
  {
22
  //uart_putchar(data[a]);
23
    dat[d]=data[a];  //*****HEX WERT WIRD IN ARRAY übergeben*****
24
  uart_putchar(dat[d]);//**** die einzelnen Werte sind in Ordnung****
25
  uart_putchar(d);
26
    d++;
27
  }
28
if (c ==1 && data[a]==0x01)
29
  {
30
    uint32_t zahl = *(uint32_t*)dat;//*****HEX Array in uint32 umwandeln****
31
    itoa(zahl,wert,10);//*****zahl in wert konvertieren*****
32
    uart_putstring(wert);// *****Wert an uart übergeben******
33
    c=0;
34
    b=0;
35
    a=5;
36
    d=0;
37
  }
38

39
if (a >98)
40
  {
41
    a = 0;
42
  }
43

44
}
Gast #2425735
Lesenswert?

Hallo,

leider sagst du nichts darüber welche "Maschine" du verwendest.
Es gibt halt "big-endian" und "little-endian" Prozessoren und auch 
welche bei denen ist ein Integer 16 Bit lang und bei anderen 32 Bit.

Wenn du also einen 32-Bit Wert zusammen bastelst genügt es nicht 4 Bytes 
in ein Array zu schreiben und zu hoffen "das geht schon".

Wenn du es nicht weisst oder darum kümmern willst dann schreib

>>uint8_t  a,b,c,d;
>>uint32_t zahl;

>>zahl = (a<<24) | (b<<16) | (c<<8) | d;


dann macht es der Compiler für dich !!!

Spätestens bei itoa oder ltoa musst du wissen was Sache ist!!!

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