Forum: Compiler & IDEs Arrayinhalt zu Integer


von greo (Gast)


Lesenswert?

Moin,
ich sitz vor folgendem Problem:

Ich habe ein Array. Daraus sollen 4 Werte (Buffer[2],[3],[4],[5]) zu 
einem Integer zusammengefasst werden.
In den einzelnen Arrayfeldern befindet sich jeweils nur eine Zahl 
zwischen 0 und 9.
Diese sollen aber nich einfach addiert werden, sondern so wie sie im 
Array stehen, als 16bit INT übernommen werden.

Wie macht man sowas?

Vielen Dank an euch

von Thomas D. (t0mmy)


Lesenswert?

Dann brauchst du einen 64-Bit Integer, damit 4x16Bit reinpassen:
1
uint16_t buf[4];
2
uint64_t myInteger;
3
4
myInteger = buf[0];
5
myInteger |= (uint64_t)buf[1]<<16;
6
myInteger |= (uint64_t)buf[2]<<32;
7
myInteger |= (uint64_t)buf[3]<<48;

von greo (Gast)


Lesenswert?

Aber in einem einzelnen Arrayfeld steht doch nur ein Byte? Also jeweils 
die Zahl 0-9.

Und ich möchte halt einfach wenn das Array z.B. so aussieht: 
[S][L][3][6][1][9]
Die Zahlen 3,6,1,9 in eine Variable x speichern als 3619.

Vielen Dank schonmal für deine Mühen!

von trivial (Gast)


Lesenswert?

Wenn es Zahlen (0-9) sind:
wert=10000*array[4]+1000*array[3]+100*array[2]+10*array[1]+array[0]

Wenn es Buchstaben '0'-'9' sind vorher noch jeweils '0' (das ist eine 
Zahl!) abziehen.

von blubb (Gast)


Lesenswert?

Du musst uns schon sagen wie dein Array definiert ist. Aus deinem ersten 
Post könnte man leicht auf uint16_t myArray[] schließen.

Ok, also ein Byte Array.

uint16_t myInt;
uint8_t myArray[4];

/*
Array befüllen */

myInt = myArray[0] * 1000 + myArray[1] * 100 + myArray[2] *10 + 
myArray[3];

Sollte passen, falls ich deine Absicht richtig verstanden habe...

von Karl H. (kbuchegg)


Lesenswert?

Ich wette, das 'Array' ist in Wirklichkeit eigentlich ein Text-String.

von Pako (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich wette, das 'Array' ist in Wirklichkeit eigentlich ein Text-String.

Und jetzt geht es wieder los: Was ist eigentlich ASCII...

von Tom M. (Gast)


Lesenswert?

greo schrieb:
> Ich habe ein Array. Daraus sollen 4 Werte (Buffer[2],[3],[4],[5]) zu
> einem Integer zusammengefasst werden.
> In den einzelnen Arrayfeldern befindet sich jeweils nur eine Zahl
> zwischen 0 und 9.

Falls du eine ASCII->Binär Wandlung machen willst, hilft dir atoi() aus 
der avr-libc. Stell aber sicher, dass der String 0-terminiert ist.

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
Noch kein Account? Hier anmelden.