julia1010
Goto Top

Int variable in ein char arry kopieren

Hi,
ich arbeite gerade an einem Mikrocontroller Projekt und scheitere gerade daran eine int Variable in ein char array zu kopieren. Das Problem ist, dass ich nicht weiß wie lang das int sein wird und ich daher keine Schleife zum Kopieren machen kann.
Hat jemand einen Tip?

void TIM2_IRQHandler(void)
{
sek++;
unsigned char zeit;
char buffer[6];
int Bit4;
Bit4= GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3);
if(Bit4==1)
{

}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

Es geht darum sek in Buffer zu speichern. Das aber Stelle für Stelle, da mir sonst beim Senden der Wert in Ascii umgewandelt wir

Content-Key: 208175

Url: https://administrator.de/contentid/208175

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: LordXearo
LordXearo 17.06.2013 aktualisiert um 22:02:35 Uhr
Goto Top
Hi,

eine Möglichkeit die mir jetzt einfällt....

Schauen ob sek : 10 >= 1 ist dann buffer = sek % 10 ;

Das in eine Schleife verpackt bis sek:10 = 0 ist.

Gruß

Xearo

Edit: Falls ich es doch weiter ausführen muss lass es mich wissen.
Mitglied: rubberman
rubberman 17.06.2013 um 22:00:44 Uhr
Goto Top
Hallo Julia1010,

vielleicht eine dumme Frage (kenne mich mit Mikrocontrollern so gar nicht aus) ...
Standard C Funktionen, wie sprintf sind nicht anwendbar?

Grüße
rubberman
Mitglied: rubberman
rubberman 17.06.2013, aktualisiert am 18.06.2013 um 01:39:15 Uhr
Goto Top
Hallo LordXearo,

das ist schon kein schlechter Ansatz, du müsstes aber char '0' (bzw. 48) addieren, um den ASCII Wert bekommen und du schreibst von links nach rechts, soll aber rechts nach links face-wink

Grüße
rubberman
Mitglied: LordXearo
LordXearo 17.06.2013 um 22:11:05 Uhr
Goto Top
Hallo rubberman,

die sachen sollten jawohl ein klacks sein. Entweder er addiert die 48, oder er läast es einfach richtig casten.
Er braucht ja auch nicht direkt in sein Array schreiben. Er könnte ja auch erstmal eine Schleife machen, um zu sehen wie oft er "durch 10" dividieren kann.
Danach nochmal eine schleife die das dann in die entsprechende Stelle ins Array schreibt.


Gruß

Xearo
Mitglied: Julia1010
Julia1010 17.06.2013 um 23:18:55 Uhr
Goto Top
nein leider mit sprinte funktionierte nicht
Mitglied: rubberman
rubberman 17.06.2013 aktualisiert um 23:47:41 Uhr
Goto Top
Hallo Julia1010,

davon ausgehend, dass sek unsigned oder zumindest >=0 ist:
  unsigned int sek = 1234567890;

  char buffer[11] = {0};
  unsigned int i = 0, cch = 0, q = sek;
  do
  {
    for (i = ++cch; i > 0; --i) buffer[i] = buffer[i - 1];
    buffer = '0' + (char)(q % 10);  
    q /= 10;
  } while (q);
Der größte Wert für einen unsigned int sollte 4294967295 sein, also 10-stellig + Nullterminierung macht 11 Elemente für deinen Puffer (oder gelten andere Typbreiten bei Mikrocontrollern?). Der Initialwert für buffer muss '\0' sein. Die for Schleife schiebt bei einem weiteren Zeichen jedes einzelne Element jeweils eine Stelle nach rechts ...

Grüße
rubberman
Mitglied: Julia1010
Julia1010 17.06.2013 um 23:47:13 Uhr
Goto Top
Ich hoffe es liegt an der Uhrzeit, aber ich kriegs nicht hin.
Bitte um weitere Ausführungen Xearo.
Danke schon im Vorhinein
Mitglied: Julia1010
Julia1010 17.06.2013 um 23:56:54 Uhr
Goto Top
Vielen vielen Dank rubberman!!!!
Es ist echt schon schlimm mit mir. Vor lauter Zeitstress funktioniert C programmieren im meinem Kopf nicht mehr.
Nochmal danke danke danke