C char Array in ASCII char Array umwandeln?!

Janiiix3

Aktives Mitglied
28. Sep. 2013
1.333
10
38
Hannover
Sprachen
  1. ANSI C
  2. C#
Hallo,

kann man das so ohne weiteres?



CodeBox C
char Buffer [6];
char Buffer_[6] = {1,2,3,4,5};

eeprom_update_block(Buffer_,&AnalogIN[0], 5);
eeprom_read_block (Buffer, &AnalogIN[0],5);

itoa(Buffer,Buffer_,10,10);


Also mit "itoa" klappt es auf jeden fall nicht... Gibt es eine andere Funktion für sowas?
 
itoa benötigt als ersten Parameter eine Integer Variable und nicht ein Pointer auf ein Array. Das kann also so garnicht funktionieren.

So ganz genau verstehe ich nicht, was du machen möchtest.
Ich vermute der Inhalt des Arrays soll im Beispiel oben ein int ergeben (int i=12345 dezimal) und i soll dann als Ascii String ausgegeben werden? Das würde dann mit itoa funktionieren. Du müsstest zunächst i erstellen.

EDIT:
Oder
(wenn das dein Ziel ist)



CodeBox C
char StringBuffer[6];
char Buffer[5] = {1,2,3,4,5};
StringBuffer[0] = Buffer[0] + 0x30;
StringBuffer[1] = Buffer[1] + 0x30;
StringBuffer[2] = Buffer[2] + 0x30;
StringBuffer[3] = Buffer[3] + 0x30;
StringBuffer[4] = Buffer[4] + 0x30;
StringBuffer[5] = '\0';
 
Zuletzt bearbeitet:
Hmm,
Man koennte jede zellle des arrays nehmen und 48 (dezimal) dazu addieren und dann mittels strcat einen string bilden.
Addi
P.s
Geb ja zu, etwas umstaendlich und nicht perfomant
 
Ich habe ein paar Kalibrationswerte im EEPROM abgelegt (uint32), diese möchte ich jetzt ausgeben via. UART.
 
Man koennte jede zellle des arrays nehmen und 48 (dezimal) dazu addieren und dann mittels strcat einen string bilden
Ja, ähnlich hatte ich es dann auch gelöst. Ich hatte meinen Beitrag #2 noch ergänzt.

Ich habe ein paar Kalibrationswerte im EEPROM abgelegt (uint32), diese möchte ich jetzt ausgeben via. UART.
Das hat nun eigentlich nichts mehr mit char Array zu tun.
char Buffer_[6] = {1,2,3,4,5};
Bei uint32_t kannst du itoa() oder die Funktionen auf der von Addi verlinkten Seite verwenden.

Aber:
Du speicherst anscheinend nicht uint32_t im Eeprom, sondern ein (uint8_t) Array über write_block und read_block?! Jetzt ist man dann doch wieder bei einem Array. Nun müsste man wissen, was es für Daten im Array sind, um diese sinnvol auszugeben.
 
Hmm..,
Man koennte es einfacher hinbekommen (pseudo code)
Reserviere einen speicherbereich
Schreibe in jedes byte eine \0
Kopiere deine bytes nacheinander in diesen vorab reservierten bereich
Und addiere jedesmal 48.
Dann duerfte der string fertig sein
Addi
 
Also,

Die Daten im Array waren jetzt nur zum Testen da, ob ich überhaupt in den EEPROM mit der Funktion schreiben kann. Das hat soweit geklappt.
Später möchte ich gerne von einem AD-Wandler (24Bit) die Kalibrationsdaten in den EEPROM speichern und evtl. mal über Termial anschauen.
 
Man koennte es einfacher hinbekommen (pseudo code)
Reserviere einen speicherbereich
Schreibe in jedes byte eine \0
Kopiere deine bytes nacheinander in diesen vorab reservierten bereich
Und addiere jedesmal 48.
Dann duerfte der string fertig sein

Ja, das wäre recht einfach zu machen, könnte man wahrscheinlich dann nutzen, wenn die einzelnen Chars tatsächlich 1er, 10er, ...10.000er ... Stellen entsprechen. Da bin ich mir aber nicht so sicher, ob die Kalibrierdaten (AnalogIN[]?) tatsächlich so gespeichert werden, hmmm. Fände ich eher seltsam oder nicht so elegant. Also das weiß nur Janiiix ;)
 
Später möchte ich gerne von einem AD-Wandler (24Bit) die Kalibrationsdaten in den EEPROM speichern und evtl. mal über Termial anschauen.

Ok, also kein char Array.
Einfach drei Byte speichern (24Bit), oder eben 32Bit uint32_t. Beim Ausgeben itoa oder die alternativen Funktionen verwenden.
 
Hallo Janiiix,

konnten wir dir weiterhelfen und hast du dein Problem lösen können, oder benötigst du noch Hilfe?

Dirk :ciao:
 
Hallo Dirk, bin ich heute leider nicht zu gekommen. Werde es diese Woche noch ausprobieren.
 
So, sorry für die Verspätung.



CodeBox C

typedef struct rfid


{

unsigned char senddata[16];

unsigned char resetVal[25];

unsigned char keyA [6 ];

unsigned char keyB [6 ];

unsigned char backdata[25];


[I]uint16_t[/I] backLen;

}MFRC522_t;


char Buffer[10];

[I]sprintf[/I](Buffer,"%d", MFRC522.backData[0]);

uart_puts("backData : ");

uart_puts("\r\n");


In meinem char Array "backData" werden jeweils eingelesene Daten gesammelt.
Diese möchte ich jetzt zu einem "String" zusammen basteln. Sprich das ich diesen String später ganz einfach mit "uart_puts" ausgeben kann.

Wäre eine Schleife mit jeweils +48 sinnvoll ?



CodeBox C
for(uint8_t x = 0 ; x < 25 ; x++)
{
  backData[x] += 48;
}


Wobei das bei > 9 wieder problematisch ist. Die Werte können durchaus > 9 werden.
Also müsste irgendwas anderes her...
 
Vermutlich oder es ist sogar so, wird Buffer jedes mal überschrieben oder ?



CodeBox C
char Buffer[76];

/* print "sendData" RS232 */


uart_puts("sendData : ");

for ([I]uint8_t[/I] x = 0 ; x < 16 ; x++)

{

[I]sprintf[/I](Buffer,"%d", MFRC522.sendData[x]);

}

uart_puts(Buffer);
 
wird Buffer jedes mal überschrieben oder ?
Ja, der wird "überschrieben".

Warum gibst du den Buffer nicht gleich in der Schleife aus, warum möchtest du einen großen String erstellen und diesen dann nach der Schleife ausgeben? Ist es innerhalb der Schleife zeitkritisch?

Strings zusammenfügen würde mit strcat funktionieren. Schau mal hier ...
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html


Kurzer Hinweis zur Code-Darstellung: Textformatierung funktioniert ein einer Code-Box nicht.

Dirk :ciao:
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)