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.
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])); |
Micha2010 schrieb: > Soweit so gut. Die Stelle buffer[8 bis 11] soll einem unsigned Long > zugeordnet werden. Ich glaube, du suchst eine 'union'.
>> Ich glaube, du suchst eine 'union'.
Nein, den Buffer muss ich auch noch woanders verwenden.
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.
union buffer {
unsigned char c[16];
unsigned long l[4];
};
Harry L. schrieb: > union buffer { > unsigned char c[16]; > unsigned long l[4]; > }; So natürlich nicht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.