Forum: Mikrocontroller und Digitale Elektronik Array Index aus Variable


von Randolf (Gast)


Lesenswert?

Hallo leute, ich verstehe momentan gar nix mehr.
1
uint8_t nr = keyNrRecieve[1];
2
uart_putc(nr); // Ausgabe 1;
3
uint8_t *p = Key[nr]; // <-- hier das Problem
4
uart_putsN(p,10);

Wenn ich nr in Key als konstante übergebe dann funzt alles(ZB. Key[1]).
Wenn ich es aber Index über nr übergebe bekomme ich nur Müll raus.

danke Randolf

von Grrrr (Gast)


Lesenswert?

Randolf schrieb:
> Wenn ich es aber Index über nr übergebe

Wenn ich das richtig sehe, dann versteht kein C-Programmierer was Du 
damit sagen willst.

in dem Ausdruck
1
uint8_t *p = Key[nr];

ist "nr" der Index in ein Array.

Verstehe ich dich recht, das es nicht funktioniert, wenn Du eine andere 
Variable (welche ?) als Index verwendest?

von Grrrr (Gast)


Lesenswert?

Aaah. Ich glaube ich ahne was.

Willst Du sagen, dass, wenn Du
1
uint8_t nr = keyNrRecieve[1];

ausführen lässt der Ausdruck
1
uint8_t *p = Key[nr];

nicht mehr "funktioniert"?

Falls Du das meinst, dann poste doch mal den Code. Vor allem die 
Deklaration von Key. Ganz naiv würde ich vermuten, das der Inhalt von 
Key kein gültiger Index in keyNrRecieve ist (Das schreibt man übrigens 
"Receive").

von Grrrr (Gast)


Lesenswert?

Grrrr schrieb:
> Vor allem die
> Deklaration von Key.

Und natürlich die Initialisierung von Key und keyNrRecieve.

von Wolfgang B. (et-tutorials) Benutzerseite


Lesenswert?

> uint8_t *p = Key[nr]; // <-- hier das Problem

p ist ein Zeiger, der auf eine Speicherstelle der Größe uint8_t 
verweist.

Funktioniert vielleicht

uint8_t *p;
p = Key;

?

Ist Key ein Array mit uint8_t?

von Randolf (Gast)


Lesenswert?

habe die Vorschläge ausprobiert leider klappt immer noch nicht.
1
uint8_t keyNrRecieve[3];
2
uint8_t Key [3][11]={"0123456789",                   "ABCDEFGHIJ",                   "KLMNOPQRST"};
3
rf12_rxdata(&keyNrRecieve,3); //Empfang von #1@
4
uart_puts("Nr empfangen:");
5
uart_putsN(&keyNrRecieve[1],1);//Ausgabe: 1
6
uint8_t nr = keyNrRecieve[1]; 
7
uart_putc(nr); // Ausgabe : 1
8
uint8_t *p = Key[nr];
9
uart_putsN(p,10); // Ausgabe Müll wenn nr benutzt wird.

von Stefan E. (sternst)


Lesenswert?

Was steht denn konkret in keyNrRecieve[1] drin? 1 oder '1'?
Jede Wette, dass es letzteres ist.

von Grrrr (Gast)


Lesenswert?

Genau:

Was wird da
1
rf12_rxdata(&keyNrRecieve,3); //Empfang von #1@

empfangen?

Falls Du die gesendeten Daten
als binäre Zahlen interpretierst, schreibe 0byyyyyyyy, wobei y = 0 oder 
1;
falls hexadezimale Zahlen, schreibe 0xyy mit y = 0-9, a-f bz.w A-F,
falls ASCII Zeichen, schreibe 'y' wobei y jedes druckbare Zeichen sein 
darf.

von Marko B. (glagnar)


Lesenswert?

@Stefan:

aendere mal

uint8_t *p = Key[nr];

in

uint8_t *p = Key[nr-'0'];

von Randolf (Gast)


Lesenswert?

die methode deklaration ist  rf12_rxdata(unsigned char *data, unsigned 
char number). Habe grade auch
1
unsigned char keyNrRecieve[3];
2
uint8_t nr = (uint8_t)keyNrRecieve[1];
probiert geht aber auch nicht. Blicke echt nicht mehr durch:)

von Grrrr (Gast)


Lesenswert?

Randolf schrieb:
> Blicke echt nicht mehr durch

Grrrr schrieb:
> Was wird da
> rf12_rxdata(&keyNrRecieve,3); //Empfang von #1@
>
> empfangen?
>
> Falls Du die gesendeten Daten
> als binäre Zahlen interpretierst, schreibe 0byyyyyyyy, wobei y = 0 oder
> 1;
> falls hexadezimale Zahlen, schreibe 0xyy mit y = 0-9, a-f bz.w A-F,
> falls ASCII Zeichen, schreibe 'y' wobei y jedes druckbare Zeichen sein
> darf.

von Randolf (Gast)


Lesenswert?

uint8_t *p = Key[nr-'0']; Hat funktioniert. Sorry habe vergessen das ich 
ein String versende. UPs

Vielen Dank Leute

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.