int richtig in char* konvertieren

OP #2551055
Lesenswert?

Hallo

Ich habe eine Funktion die mir Daten über ein RFM22B Modul sendet.
1
rf22_sendpacket((unsigned char*)"Hallo",5);
das senden eines Strings klappt.
Nun will ich einen Int wert versenden. Wie konvertiere ich einen in Wert 
richtig in einen char* Wert?

im Internet lese ich immer wieder was von folgende Funktion.
1
char *  itoa ( wert(sizeof(int)*8+1),10);

Ich habs zuerst so probiert
1
   char buf[8];
2
   sprintf(buf,"%05u",wert);
3
  *data=buf;
4
  rf22_sendpacket((unsigned char*)buf,size);

leider will das nicht so recht
(Firma: guloshop.de) #2551091
Lesenswert?

Christoph B. schrieb:
>
1
> char *  itoa ( wert(sizeof(int)*8+1),10);
2
>

Hallo!
Das versteh ich grad nicht.

>
1
>    char buf[8];
2
>    sprintf(buf,"%05u",wert);
3
>   *data=buf;
4
>   rf22_sendpacket((unsigned char*)buf,size);
5
>

OK, das versteh ich, und es sollte auch funktionieren. :-)
Statt 'size' in der letzten Zeile solltest du 5 einsetzen - oder besser: 
strlen(buf). Ich kenn die Funktion rf22_sendpacket nicht, vielleicht 
reicht auch die Zahl 0 statt 'size'.

Falls dein Programm auf einem Mikrocontroller läuft, wunder dich nicht, 
wenn sprintf() langsam arbeitet, die Funktion ist nicht sonderlich gut 
dafür geeignet. Grundsätzlich ist eine Übertragung der Zahl im 
Binärformat performanter - falls das in diesem Fall in Frage kommt.
OP #2551113
Lesenswert?

hallo

leider bekomme ich über USART folgendes

00452

00453

00454

00455
00456

00457
uws

Teilweise ist ein Leerzeichen dazwischen teilweise nicht
bei rf22_sendpacket((unsigned char*)"Hallo",5)
schaut es so aus
Hallo
Hallo
Hallo
Hallo
usw

ups das *data=buf; gehört hier nicht rein.

was gibt es sonst für eine Möglichkeit??
OP #2551138
Lesenswert?

sprintf(char*,"%d",integer);
ok das klappt schonmal.
1
void rf22_sendpacket_int(unsigned int wert,unsigned char size) 
2
{  
3
  unsigned char *data;
4
  unsigned char i;
5

6
  if (size>64) size=64;
7
  
8
  rf22_write(0x07, 0x03);    // switch to ready mode
9
  rf22_read(0x03);      // clear interrupt status
10
  rf22_read(0x04);      // clear interrupt status
11

12
  rf22_write(0x08, 0x01);    // clear TX fifo
13
  rf22_write(0x08, 0x00);    // clear TX fifo
14
  
15
  rf22_write(0x34, 32);    // premable length: 32 nibbles -> 128 Bits
16
  rf22_write(0x3e, size);    // packet length
17
  
18
  for (i = 0; i<size; i++)
19
  {    
20
    rf22_write(0x7f, *data++);
21
  }
22
  
23
  rf22_write(0x05, 0x04);    // enable packet send
24
  rf22_write(0x07, 0x09);    // TX on
25
  
26
  while (nIRQ);
27
  
28
  rf22_write(0x07, 0x01);    //  switch to ready mode
29
  
30
  char buf[8]; // puffer für den String
31
  sprintf(buf,"%d",wert); // wandelt eine Zahl in einen String mit 5 Stellen
32
  rf22_sendpacket((unsigned char*)buf,strlen(buf));
33
}
#2551165
Lesenswert?

Christoph B. schrieb:
> ok das klappt schonmal.

Gut.

Gibts noch ein Problem, oder wars das?

Mit itoa gehst genauso


   char buf[8]; // puffer für den String
   itoa( wert, buf, 10 );
   rf22_sendpacket((unsigned char*)buf,strlen(buf));

itoa hat an dieser Stelle den Nachteil, oder Vorteil (je nachdem), dass 
es keine führenden 0-en generiert. Und die sind auch nicht so einfach zu 
ergänzen wie bei sprintf. Wenn das kein Problem ist, dann ist itoa dein 
Mann.
#2551171
Lesenswert?

Am besten schreibst du dir ein paar Hilfsfunktionen
1
void rf22_sendString( const char* str )
2
{
3
  rf22_sendpacket((unsigned char*)str, strlen(str));
4
}
5

6
void rf22_sendInt( int value )
7
{
8
  char buffer[10];
9
  itoa( value, buffer, 10 );
10
  rf22_sendString( buffer );
11
}

dann bist du die Details des Sendens für einzelne Datentypen los.
Gast #2551172
Lesenswert?

Karl Heinz Buchegger schrieb:
> Ganz einfach. Was soll das sein? Das ist noch nicht mal einigermassen
> korrekte Syntax. Seit wann werden an dieser Stelle bei einem
> Funktionsaufruf Datentypen angegeben?

Bleib mal ganz ruhig. Er wollte damit sicherlich nur den Datentyp der 
einzusetztenden Variable angeben. So hab ich es zumindest verstanden.
Gast #2551179
Lesenswert?

Karl Heinz Buchegger schrieb:
> Ganz einfach. Was soll das sein?

Das war ein Beispiel, was Christoph W. anscheinend verstanden und 
angewendet hat. Funktioniert hat es anscheinend auch und das Problem ist 
gelöst.
Manchmal ist ein durchdachtes Beispiel eben sinnvoller, als inhaltlich 
100%ig richtiges Fachchinesisch. Auch wenns evtl am Ego kratzt...
#2551197
Lesenswert?

marius schrieb:
> Karl Heinz Buchegger schrieb:
>> Ganz einfach. Was soll das sein?
>
> Das war ein Beispiel, was Christoph W. anscheinend verstanden und
> angewendet hat.

Das glaub ich nicht
Er hat sein Posting mitlerweile verändert, die ursprüngliche Antwort auf 
dein Posting war: Da bekomme ich aber 6 Fehler

> Manchmal ist ein durchdachtes Beispiel eben sinnvoller, als
> inhaltlich 100%ig richtiges Fachchinesisch.

Eben. Pass dein Beispiel auf die Variablen an, die er benutzt und gut 
ists.

Damit, dass du deine eigenen Syntaxabkürzungen verwendest, hilfst du 
keinem

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren