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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.