Forum: Mikrocontroller und Digitale Elektronik Variable Wert aus Array verschiedenen Typs zuweisen


von Micha2010 (Gast)


Lesenswert?

Hallo Leute,

typische Anfängerfrage:

Ich habe ein Array[16] of unsigned char, dessen Inhalt ich verschiedenen 
Variablen zuordnen möchte.

unsigned char buffer[16];

char min = (char)buffer[0];
char max = (char)buffer[1];

Soweit so gut. Die Stelle buffer[8 bis 11] soll einem unsigned Long 
zugeordnet werden.

Wäre das so?
unsigned long value = (unsigned Long)*(buffer+8)

oder so
unsigned long value = (unsigned Long)*(buffer+2)
da der Compiler beim Long 4 statt 1 im Speicher addiert?

Ich möchte gerne vermeiden noch temporäre extra Zeiger zu erzeugen.
Danke schon mal für die Hilfe.

von Joe F. (easylife)


Lesenswert?

1
char min = (char)buffer[0];

Das casten hier ist überflüssig.
1
char min = buffer[0];
reicht.

Beim 4 byte -> unsigned long kommt es auf die byteorder an.
MSB first geht so:
1
unsigned long value = ((unsigned long)(buffer[ 8]) << 24) |
2
                      ((unsigned long)(buffer[ 9]) << 16) |
3
                      ((unsigned long)(buffer[10]) << 8) |
4
                      ((unsigned long)(buffer[11]));

LSB first geht so:
1
unsigned long value = ((unsigned long)(buffer[11]) << 24) |
2
                      ((unsigned long)(buffer[10]) << 16) |
3
                      ((unsigned long)(buffer[ 9]) << 8) |
4
                      ((unsigned long)(buffer[ 8]));

von Ralf G. (ralg)


Lesenswert?

Micha2010 schrieb:
> Soweit so gut. Die Stelle buffer[8 bis 11] soll einem unsigned Long
> zugeordnet werden.

Ich glaube, du suchst eine 'union'.

von Micha2010 (Gast)


Lesenswert?

>> Ich glaube, du suchst eine 'union'.

Nein, den Buffer muss ich auch noch woanders verwenden.

von Ralf G. (ralg)


Lesenswert?

Micha2010 schrieb:
> Nein, den Buffer muss ich auch noch woanders verwenden.

Hmm. Dann gehe ich mal davon aus, dass wir auf Grund der dürftigen 
Informationslage aneinander vorbeireden.

von Harry L. (mysth)


Lesenswert?

union buffer {
    unsigned char c[16];
    unsigned long l[4];
};

von Ralf G. (ralg)


Lesenswert?

Harry L. schrieb:
> union buffer {
>     unsigned char c[16];
>     unsigned long l[4];
> };

So natürlich nicht.

von Harry L. (mysth)


Lesenswert?

Ralf G. schrieb:
> So natürlich nicht.

was stört dich daran?

von Ralf G. (ralg)


Lesenswert?

Harry L. schrieb:
> was stört dich daran?

Weil die Vorgabe eine andere ist:
Micha2010 schrieb:
> Ich habe ein Array[16] of unsigned char,
>
> ...
>
> Die Stelle buffer[8 bis 11] soll einem unsigned Long zugeordnet werden.

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.