-
        

Ergebnis 1 bis 5 von 5

Thema: itoa???

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2006
    Beiträge
    183

    itoa???

    Anzeige

    Hi,
    ich möchte eine int-Zahl in asci umwandeln -> itoa und mit USART ausgeben.

    Wie muss ich diese Funktion anwenden?

    unsigned int buffer[];
    USART_transmit_s(itoa(22,buffer[0],3));


    FEHLER:
    Warning passing arg 2 of 'itoa' makes pointer from int without a cast.

    Was mach ich falsch? Hat jemand erfahrung damit?
    Wäre nett wenn ihr mir weiterhelfen könntet.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205
    Hallo

    als erstes Argument bekommt itoa die Integervariable, bzw den Integerwert, das zweite Argument ist ein char Array (nicht wie bei dir ein Int-Array) das 3. Argument gibt dann an wie der Integerwert umgewandelt werden soll (z.b. 10 für Dezimalsystem)
    sieht dann so aus:

    Code:
    char wert[5];
    itoa(variable,wert,10);
    'wert' kannst du dann per USART übertragen.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Dein Array sollte aus unsigned char bestehen und ein Größenangabe haben.
    unsigned char buffer[7];

    itoa will nicht den Inhalt der ersten Bufferposition (buffer[0]), sondern einen Zeiger auf den Anfang des buffers.
    itoa(22,buffer,3);

    und da du wohl Dezimalzahlen haben willst und kein Dreiersystem, wäre 10 statt 3 als Basis wohl besser.
    itoa(22,buffer,10);

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2006
    Beiträge
    183
    Danke für die schnellen Antworten.

    ich hab es jetzt hinbekommen.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.05.2007
    Ort
    Merseburg
    Alter
    36
    Beiträge
    130
    Falls du eine selbstgeschriebene Funktion willst die das tut, wie wärs damit:


    Code:
    int IntToChars (char* buffer, int value, int spaceonbuffer, int countbase)
    {
    	int workvalue = value;
    	int i;
    	int valuetowrite;
    	int  end_i = 0;
    
    	if (value < 0)
    	{
    		workvalue = -value;
    		end_i = 1;
    		buffer[0] = '-';
    	}
    
    	for (i = spaceonbuffer - 1; i >= end_i; i--)
    	{
    		valuetowrite = (workvalue % countbase);
    		if (workvalue == 0)
    		{
    			if (i == (spaceonbuffer - 1))
    			{
    				buffer[i] = 48;					// ASCII 0
    			} else {
    				buffer[i] = 32;					// ASCII SPACE
    			}
    		} else {
    			if (valuetowrite > 9)
    			{
    				buffer[i] = valuetowrite + 55;	// ASCII A-Z
    			} else {
    				buffer[i] = valuetowrite + 48;	// ASCII of that character
    			}
    		};
    		workvalue = (workvalue - valuetowrite) / countbase;
    	}
    	return (workvalue);	//this should be zero if enough space on buffer!
    							//otherwise it contains the digits not printed out
    }
    lustige funktion die während dem robotik praktikum im rahmen meines informatikstudiums entstand wir haben da asuros rumfahren lassen.

    Als ich die funktion fertig hatte hab ich dann festgestellt dass die nix anderes tut als itoa *lol* na wenigstens kann man über countbase einstellen ob man zur basis 2...36
    mehr als 36 ist ungünstig wegen dem alphabet mit 26 zeichen


    Edit: Bug gefunden

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •