Forum: Mikrocontroller und Digitale Elektronik memcpy mit integer Zeiger


von hansmoleman (Gast)


Lesenswert?

Hallo,

Ich habe da mal eine Frage;-)
Es handelt sich um ein 32bit System. Ein Integer belegt somit 4Byte.
Annahme: Big Endian

void Copy(unsigned int* pSource)
{
  unsigned char bArray[4] = {1,2,3,4};

  memcpy(pTarget, bArray, 4);
}

Wie sieht der Speicher danach aus ?

So???
0x01
0x02
0x03
0x04

oder so???
0x00
0x00
0x00
0x01

0x00
0x00
0x00
0x02

0x00
0x00
0x00
0x03

0x00
0x00
0x00
0x04

Gruß,
Hans

von Karl H. (kbuchegg)


Lesenswert?

memcpy sind deine integer aber sowas von schnurzegal. memcpy kopiert 
Bytes, nicht mehr und nicht weniger.

von Frickler (Gast)


Lesenswert?

hansmoleman schrieb:
> Es handelt sich um ein 32bit System. Ein Integer belegt somit 4Byte.

<erbsenzaehl>
Die Schlussfolgerung ist nicht notwendigerweise richtig. Der C Standard 
sagt nur, dass ein 'int' mindestens 16bit breit ist. Wie groß er 
tatsächlich ist, hängt vom Compiler ab.
</erbsenzaehl>

von hansmoleman (Gast)


Lesenswert?

HAllo,

Vielen Dank für die Hilfe.
D.h. memcpy kopiert an die Zieladresse 4Bytes !

==> *pTarget == 0x01020304 ???

@Frickler
Danke für den Hinweis !

von Karl H. (kbuchegg)


Lesenswert?

hansmoleman schrieb:
> HAllo,
>
> Vielen Dank für die Hilfe.
> D.h. memcpy kopiert an die Zieladresse 4Bytes !

Genau

>
> ==> *pTarget == 0x01020304 ???

Ob du das mit deinem 4 Byte integer, dann auch als 0x01020304 auslesen 
kannst, hängt davon ab, welche Endianess dein System hat.

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.