Forum: Compiler & IDEs Pointer casten


von Rudi (Gast)


Lesenswert?

Hallo,

ich habe einen Sendepuffer. Dieser ist in 32 Bit Werten organisiert. 
Mittels einer Funktion kann ich mir einen Zeiger auf diesen Puffer 
ausgeben lassen:

uint32_t *Get_BufferPtr();

Wenn ich nun etwas in diesen Puffer schreiben will, zB so:

uint32_t *buffer;
buffer = Get_BufferPtr();

buffer[0] = 'H';
buffer[1] = 'a';
buffer[2] = 'l';
buffer[3] = 'l';
buffer[4] = 'o';

Schaut das Ganze im Speicher hinterher so aus: H000a000l000l000o000

Soweit ja logisch, immerhin schreibe ich jedesmal einen 32Bit Wert.
Um also "Hallo" hineinzuschreiben muss ich irgendwie casten. Nur da 
happerts.

So hab ichs bisher probiert:
((uint8*) buffer)[i] = ...;
((uint8*) buffer[i]) = ...;

Beides hilft nichts. Ich würde aber gerne den Puffer in 8Bit Schritten 
beschreiben können.

Kann mir da jemand weiterhelfen?

Viele Grüße,
Rudi

von Peter II (Gast)


Lesenswert?

1
uint8_t *buffer;
2
buffer = (uint8_t*)Get_BufferPtr();
3
4
buffer[0] = 'H';
5
buffer[1] = 'a';
6
buffer[2] = 'l';
7
buffer[3] = 'l';
8
buffer[4] = 'o';

von Bronco (Gast)


Lesenswert?

Rudi schrieb:
> Dieser ist in 32 Bit Werten organisiert.
Dann mußt Du beim byteweise beschreiben die Byte-Order (Little-Endian, 
Big-Endian) Deines Controllers beachten.

von Andreas B. (andreas_b77)


Lesenswert?

Rudi schrieb:
> ((uint8*) buffer)[i] = ...;

So müsste es gehen. (Abgesehen davon, dass der Datentyp uint8_t heißt.)

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.