Forum: PC-Programmierung C char pointer Zugriff


von ToMa (Gast)


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.

von ToMa (Gast)


Lesenswert?

Natürlich nicht +1 bzw. [1]...Sorry.

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Du schreibst recht unverständlich. Hast du einen Debugger zur Hand? 
Kennst du die Datengröße deines
1
unsigned char buffer;

?

von Curby23523 N. (Gast)


Lesenswert?

1
char * Text = "Hello World!";
2
 
3
char var;
4
5
var = Text[0];
6
var = Text[1];
7
var = Text[2];

von ToMa (Gast)


Lesenswert?

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

von Curby23523 N. (Gast)


Lesenswert?

Das hier ist kein Array:
1
void read (unsigned char);
2
...
3
unsigned char buffer;

von Ohman (Gast)


Lesenswert?

Oder auch
1
*(Text + i)

;-)

von J. F. (Firma: Père Lachaise) (rect)


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.

von Curby23523 N. (Gast)


Lesenswert?

Ohman schrieb:
> Oder auch
>
>
1
*(Text + i)
>
> ;-)

Oder weniger kryptisch........
1
var = Text[i];

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

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

Damit meinte ich nur den ersten Teil deiner Antwort.

von Ohman (Gast)


Lesenswert?

Nils N. schrieb:
> Ohman schrieb:
>> Oder auch
>>
>>*(Text + i)>
>> ;-)
>
> Oder weniger kryptisch........
> var = Text[i];

Deswegen ja auch der Smiley :)

von lalala (Gast)


Lesenswert?

Nils N. schrieb:
> Oder weniger kryptisch........
> var = Text[i];

oder noh kryptischer:

var = i[Text]

von lalala (Gast)


Lesenswert?

noch

von Rolf M. (rmagnus)


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.

: Bearbeitet durch User
von A. S. (Gast)


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?

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.