PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : int wert in 4 bytes aufteilen--> geht das überhaupt?



katiiiiii
17.03.2005, 10:40
Hallo Leute!

Ich möchte gern für die serielle übertragung, einen int wert, der ungefähr die größe 50000 hat in 4 Bytes aufteilen und dann an ein programm das ein kollege von mit mit java programmiert hat senden. bis jetzt hab ich nur Acsi zeichen senden können. habs mit tera term ausprobiert.
hab den programmcode von mir hinzugefügt. mit einem atmega16 und einem stk-board gehts.

hat vl jemand eine idee?

Mfg
Kati

PicNick
17.03.2005, 11:37
Wie auch immer:


union {
int iInt;
char bCh[4];
} mixed;

// Laden
for (iX=0;iX<4;iX++)
mixed.bCh[iX] = inputcharacter;

//Arbeiten
mixed.iInt = 324 * 68405; // z.B.

// Export
for (iX=0;iX<4;iX++)
outut = mixed.bCh[iX];

katiiiiii
17.03.2005, 12:10
naja, mit dem kann i leider nix anfangen...
zumindest versteh i des net mal..
aber trotzdem danke

PicNick
17.03.2005, 12:23
Na, ich versuch's mal:
das, was in Union definiert wird, also das "int" und das "char [4]" , steht (wegen "UNIT") an der selben Speicheradresse.
d.h. die gleichen 4 bytes sind einmal ein 32-Bit integer, und einmal 4 einzelne Bytes.
daher kannst du durch die angabe mixit.iInt ein Integer bearbeiten und durch die Angabe mixit.bCh[n] eines der vier Bytes.
Besser ?

katiiiiii
17.03.2005, 13:19
danke für die antwort...
is der code auch codevision avr?

mfg

PicNick
17.03.2005, 13:23
"UNION" is ganz einfach normal-C . das sollte jeder können.

muraad
17.03.2005, 13:51
Würde es auch so gehen?

unsigned char buffer[5];
unsigned char int wert;
sprintf(buffer,"%u",&wert);
usart_puts(buffer);

Gruß Muraad

PicNick
17.03.2005, 14:09
Klar, wenn du aus "wert" einen string machst, geht das.
Nur ist halt der "sprintf" ein ziemliches Massaker für den Computer. Man sieht es dem Befehl halt nicht an.

muraad
17.03.2005, 14:59
Was ist den an sprintf() so schlimm?
Außer das es Bufferoverflow gefährdet ist.
Gruß Muraad

PicNick
17.03.2005, 15:05
Die Arbeit liegt im Format-String ("%u") . Er muß zur Laufzeit diesen Ascii-String interpretieren und in deinem Fall letztlich die Binärzahl ins dezimalsystem bringen. Das erfordert schon das eine oder das andere Statement.
Mach dir den Spaß und programmier' das mal aus, da staunt der Laie und der Fachmann lächelt. :)

muraad
17.03.2005, 15:11
Ah verstehe, braucht ordentlich Code und Rechenleistung.
Also danke dir.
Gruß Muraad