Hallo zusammen,
ich habe die letzten Tage an einem RFID Card-Reader gesessen.
Schreiben geht, lesen geht, alles OK.
Auf der Karte werden die Besitzerdaten gespeichert.
Vorname, Nachname, Geburtstag, Karte gültig bis.
Jetzt kommt es aber in Deutschland öfter vor, dass jemand Müller heißt.
Schreiben geht, kein Gemecker bei Sonderzeichen.
Beim Auslesen werden dann halt nicht HTML-Konforme Zeichen erzeugt.
Gelesen und geschrieben wird über eine Webseite via ajax.
Nach einer langen Nachtschicht mit 4 Kannen Kaffee habe ich dann diesen Code für die Umwandlung der Sonderzeichen geschrieben:
String dumpByteArray(byte buff[], byte len, bool replaceChars) {
char byteArray[len];
memset(byteArray, 0, sizeof(byteArray));
char build[6];
for (uint8_t i = 0; i < len-2; i++) {
if (buff[i] == 32 || buff[i] == 10 || buff[i] == 13) {
continue;
}
if (replaceChars) {
switch (buff[i]) {
case 196: sprintf(build, "%s", "Ä"); break;
case 214: sprintf(build, "%s", "Ö"); break;
case 220: sprintf(build, "%s", "Ü"); break;
case 223: sprintf(build, "%s", "ß"); break;
case 228: sprintf(build, "%s", "ä"); break;
case 233: sprintf(build, "%s", "é"); break;
case 246: sprintf(build, "%s", "ö"); break;
case 252: sprintf(build, "%s", "ü"); break;
default: sprintf(build, "%c", buff[i]); break;
}
}
else{
sprintf(build, "%c", buff[i]);
}
strcat(byteArray, build);
memset(build, 0, sizeof(build));
}
char result[sizeof(byteArray+2)];
sprintf(result, "%s", byteArray);
return String(result);
}
funktioniert wunderbar.
Jetzt eine Frage an die hier anwesenden C++ Experten:
Ist das C++ komform oder eher Basic?
Geht da noch eine Optimierung in Bezug auf Geschwindigkeit oder Speicherverbrauch?
Ich bin schon zufrieden, dass es überhaupt funktioniert aber irgendwie sieht das nicht so richtig C++ aus.
Gruß von einem inzwischen grauhaarigen Programmierer