Problem - Array in String oder ähnlichem umzuwandeln

Hallo ich bin neu hier im Forum und habe gleich ein Problem auf das ich einfach keine vernünftige Lösung finde.

Ich verwende ein NFC Lesegerät auf Basis PN532 welches über i2c mit Ardunio verbunden ist.
Das funktioniert tadellos und tut auch für das Problem nichts zu Sache.
Ich bekomme den Key der NFC Karte wie folgt ausgelesen.

  • for (uint8_t i=0; i < uidLength; i++)*
  • {*
    _ Serial.print(uid*, HEX);_
    _
    }_
    auch einzelne Blöcke auslesen funktioniert
    _
    Serial.print(uid[1], HEX);_
    _
    Serial.print(uid[1], HEX);_
    _
    Serial.print(uid[2], HEX);_
    _
    Serial.print(uid[3], HEX);_
    _
    Serial.print(uid[4], HEX);_
    _
    Serial.print(uid[5], HEX);_
    _
    Serial.print(uid[6], HEX);*_
    Mir geht es nun darum, wie bekomme ich diese Sätze in einen Variable - sprich String?
    Ich muss den ganzen Schlüssel vergleichen, da nur eine aktion erfolgen darf, wenn der richtige Schlüssel ausgelesen wird.
    Bitte um Info, wie man das Array in einen String schreiben kann...
    Danke
    Michael

mastergraf:
Mir geht es nun darum, wie bekomme ich diese Sätze in einen Variable - sprich String?

Du hast die Variable doch offenbar in einem Array. Dann nimm doch zum Vergleichen:
http://www.cplusplus.com/reference/cstring/memcmp/

char strBuf[7];
for (uint8_t i=0; i < uidLength; i++) 
{
   sprintf(strBuf, "%x", uid);
}

Hallo Jurs
Danke das mit dem Vergleichen hätte ich noch hinbekommen.
Da ich diesen Key "recht mundgerecht" weiterverarbeiten möchte - Anzeige am Display usw. möchte ich eben diesen konvertieren und in einer "Variable" abspeichern.

mastergraf:
Hallo Jurs
Danke das mit dem Vergleichen hätte ich noch hinbekommen.
Da ich diesen Key "recht mundgerecht" weiterverarbeiten möchte - Anzeige am Display usw. möchte ich eben diesen konvertieren und in einer "Variable" abspeichern.

Wie ist denn das Array "uid" deklariert?

uid wurde so definiert.

uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID

kann auch den ganzen Code posten, aber wie gesagt, ich möchte ja nur wissen wie man ein solches Arry konvertieren kann....

Absolut trivial ist das nicht. Da du als String ja mehrere Bytes für eine Zahl brauchst. z.B. 123 ist "123" oder "7B" und dann brauchst du noch Trennzeichen dazwischen. Kommt letztlich auf das genaue Format an das du willst.

Es ist aber kein großes Problem einen entsprechend großen Puffer anzulegen (die Größe ist durch das gewünschte Format bekannt), über das Array zu iterieren, die Werte einzeln zu Wandeln und auf die korrekten Positionen zu schreiben und wenn gewünscht ein Trennzeichen einzufügen. Man muss aber mit den Indizes aufpassen.

Integer in Hex String geht hiermit und Radix 16:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga1d4c7b84110553544081a69a0fc49c52
Die gleiche Funktion mit Radix 10 macht eine normale Dezimalzahl draus. Halt in ASCII

mastergraf:
ich möchte ja nur wissen wie man ein solches Arry konvertieren kann....

In was konvertiert?
Vielleicht in eine HEX-Darstellung, dann ist die Länge des Strings immer gleich?

  Serial.begin(9600);
  uint8_t uid[] = { 0x60, 0x61, 0x62, 0xA3, 0x04, 0x50, 0x00 };  // Buffer to store the returned UID
  char uidStr[2*sizeof(uid)+1];  // String buffer to store UID in HEX representation
  snprintf(uidStr,sizeof(uidStr), "%02x%02x%02x%02x%02x%02x%02x", uid[0],uid[1],uid[2],uid[3],uid[4],uid[5],uid[6],uid[7]);
  Serial.println(uidStr);

Die UID bei Mifare Karten ist nur 4 Byte plus Prüfziffer lang. Spar Dir das 6. und 7.Byte. siehe unten.

Ich hatte das Problem auch, habe es aber ebenso wie jurs beschreibt verwendet. Hier kannst Du sehen wie ich damit umgegangen bin: DuinoSqueeze: 01/10/13.

Eberhard

Lese gerade, dass es auch 7-Byte UID's gibt. Man lernt nie aus! Hängt wohl von der Karte und dem NFC Chip ab.