C char pointer Zugriff

Gast #5339360
Lesenswert?

Hallo,
wie kann ich auf die 3 Byte eines char array einzeln zugreifen? Mit z.B.
1
lsb = buff +1;
   oder
1
lsb = buff[1];
geht es nicht.

Ich habe folgende Funktion:
1
void read (unsigned char);
2
...
3
unsigned char buffer;

In der Funktion:
for-schleife, darin
1
buff[ii] = temp;
    (insgesamt 3x1 byte)

Main-Aufruf:
read(&buffer);

Danach komme ich aber nicht auf den gesamten Inhalt von buffer. Ich habe 
leider ewig nicht mit mit C programmiert und bin etwas verwirrt.
(Firma: Père Lachaise) #5339383
Lesenswert?

ToMa schrieb:
> Laut Debugger ist buffer 1 byte groß. Ich habe jetzt buffer << 8
> versucht, ist das so korrekt?

Das ist korrekt. Für mich ist unklar wieviel du darin speichern 
wolltest, deshalb die Frage.

Die Lösung wurde aber ja schon vorgekaut.

Sonst noch die Bemerkung das deine temporäre Variable natürlich nur 
innerhalb der Funktion exisitiert in der sie deklariert wurde.
#5340562
Lesenswert?

ToMa schrieb:
> Hallo,
> wie kann ich auf die 3 Byte eines char array einzeln zugreifen? Mit
> z.B. lsb = buff +1;   oder lsb = buff[1]; geht es nicht.

Wenn buff ein Array ist, gibt dir buff + 1 einen Zeiger auf das zweite 
Element. buff[1] gibt dir den Wert des zweiten Elements.

> Ich habe folgende Funktion:
> void read (unsigned char);
> ...
> unsigned char buffer;
> In der Funktion:
> for-schleife, darin
> buff[ii] = temp;    (insgesamt 3x1 byte)

buff ist hier nirgends definiert, temp auch nicht. Dem Paramter von read 
fehlt ein Name, und buffer ist unbenutzt. Bitte Code posten, der 
wenigstens halbwegs einen Sinn ergibt und zeigt, was du eigentlich tust.

> Main-Aufruf:
> read(&buffer);
>
> Danach komme ich aber nicht auf den gesamten Inhalt von buffer.

Was meinst du mit "gesamten Inhalt von buffer"? buffer ist nur ein Byte 
groß. Weniger als "den gesamten Inhalt" kannst du da gar nicht 
rauslesen.

ToMa schrieb:
> Laut Debugger ist buffer 1 byte groß.

Ja, so hast du es auch definiert. Hättest du jetzt etwa erwartet dass

> unsigned char buffer;

ein Array aus drei Elementen erzeugt? Was an dieser Zeile macht es 
deiner Meinung nach zu einem Array? Und wo steht die 3?

> Ich habe jetzt buffer << 8 versucht, ist das so korrekt?

Nein. buffer << 8 gibt dir das 256-fache des Wertes in buffer.

Anmerkung: C-Programmierung nach dem Prinzip trial&error ist extrem 
mühsam und wird nicht zum gewünschten Ziel führen.
Gast #5340609
Lesenswert?

1
/* eine einzelne Variable von 1 Byte */
2
unsigend char buff;
3

4
/* ein Array von 3 Byte */
5
unsigend char buff3[3];
6

7
/* eine Funktion, die einen Pointer auf ein Byte bekommt */
8
void read(unsigned char *p)
9
{
10
unsigned char c 
11

12
   c = *p;   /* zuweisen mit erstem Byte von p */
13
   c = p[0]; /* das gleiche wie c = *p; */
14

15
   c = p[2]; /* zuweisen mit drittem Byte von p */  
16
}
17

18
int main(void)
19
{
20
   buff3[0] = 40;
21
   buff3[1] = 50;
22
   buff3[2] = 60;
23

24
   read( buff3   ); /* uebergibt die Startadresse des Arrays */
25
   read(&buff3[0]); /* das gleiche wie read(buff3); */
26

27

28
   buff = 100;
29
   read(&buff); /* übergebe den Pointer von buff*/
30
   /* !!! Achtung  !!! Read liest *Mist* in letzer Zeile, da buff nur 1 Byte groß */
31
}

gibt es hier irgendwas, das Deiner Frage oder Deinem Problem ähnlich 
ist?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren