Archiv verlassen und diese Seite im Standarddesign anzeigen : itoa???
chientech
25.04.2007, 15:35
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.
robo junior
25.04.2007, 15:47
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:
char wert[5];
itoa(variable,wert,10);
'wert' kannst du dann per USART übertragen.
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);
chientech
26.04.2007, 09:34
Danke für die schnellen Antworten.
ich hab es jetzt hinbekommen.
Phantomix
07.05.2007, 02:31
Falls du eine selbstgeschriebene Funktion willst die das tut, wie wärs damit:
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.