/*Wandlung von 1 bis 4 Byte in ASCII mit Überlauf Überprüfung(StellenAnzahl...) und mit setzen von der fester Komma und Vorzeichen Vordere Nullen werden auch gezeigt!*/ unsigned char * Format_XByte_XStellen (unsigned char *ASCIZiel,unsigned char *QuelleAdresse,unsigned char GroesseInBytes, unsigned char StellenAnzahl,unsigned char KomaStellen,unsigned char Vorzeichen_JA_Nein) { unsigned char StellenWert; signed char CharZahl; unsigned char UCharZahl; signed short ShortZahl; unsigned short UShortZahl; signed long LongZahl; unsigned long ULongZahl; if(Vorzeichen_JA_Nein) { if(GroesseInBytes<4) { if(GroesseInBytes==1) ShortZahl = *(char*)QuelleAdresse; else ShortZahl = *((signed short*)QuelleAdresse); if (ShortZahl<0) { *ASCIZiel++ = '-'; UShortZahl = - ShortZahl; } else { *ASCIZiel++ = '+'; UShortZahl = ShortZahl; } }else { LongZahl= *((signed long*)QuelleAdresse); if (LongZahl<0) { *ASCIZiel++ = '-'; ULongZahl = - LongZahl; } else { *ASCIZiel++ = '+'; ULongZahl = LongZahl; } } } else { if(GroesseInBytes<4) { if(GroesseInBytes==1) UShortZahl = *((unsigned char *)QuelleAdresse); else UShortZahl = *((unsigned short*)QuelleAdresse); } else ULongZahl= *((unsigned long*)QuelleAdresse); } if(GroesseInBytes==4) { if(!(ULongZahl&0xFFFF0000)) { GroesseInBytes = 2; UShortZahl = ULongZahl; } } if(GroesseInBytes<4) { Weiter1234: if(UShortZahl & 0xFF00) /*Die Zahl ist grösser als 1 Byte*/ { if (StellenAnzahl<3) goto Ueberlauf; if (StellenAnzahl>5) for(StellenWert=5;StellenWert=10000;UShortZahl -=10000) ++StellenWert; if(StellenWert) if (StellenAnzahl<5) goto Ueberlauf; if (StellenAnzahl>=5) *ASCIZiel++ = StellenWert+'0'; ShortZahl = UShortZahl; weiterVonL: for (StellenWert = 255;ShortZahl>=0;ShortZahl-=1000) ++StellenWert; ShortZahl+=1000; if(StellenWert) if (StellenAnzahl<4) goto Ueberlauf; if (StellenAnzahl>=4) *ASCIZiel++ = StellenWert+'0'; for (StellenWert = 255;ShortZahl>=0;ShortZahl-=100) ++StellenWert; ShortZahl+=100; if(StellenWert) if (StellenAnzahl<3) goto Ueberlauf; if (StellenAnzahl>=3) *ASCIZiel++ = StellenWert+'0'; CharZahl = ShortZahl; weiter123: for (StellenWert = 255;CharZahl>=0;CharZahl-=10) ++StellenWert; CharZahl+=10; if(StellenWert) if (StellenAnzahl<2) goto Ueberlauf; if (StellenAnzahl>=2) *ASCIZiel++ = StellenWert+'0'; *ASCIZiel++= CharZahl+'0'; NochKommaStellen: if (KomaStellen) { for(StellenWert=KomaStellen;StellenWert>0;--StellenWert) *ASCIZiel--=*(ASCIZiel-1); *ASCIZiel++='.'; ASCIZiel +=KomaStellen; } #if MIT_NULL_ABSCHLUSS *ASCIZiel = 0; #endif return ASCIZiel; Ueberlauf: for(StellenWert=0;StellenWert3) for(StellenWert=3;StellenWert=100;UCharZahl -=100) ++StellenWert; if(StellenWert) if (StellenAnzahl<3) goto Ueberlauf; if (StellenAnzahl>=3) *ASCIZiel++ = StellenWert+'0'; CharZahl = UCharZahl; goto weiter123; } } else /*Zahl von 4-Bytes*/ { if (!(ULongZahl&0xFFFF0000)) { UShortZahl = ULongZahl; goto Weiter1234; } if(ULongZahl & 0xFF000000) /*Die Zahl ist grösser als 3 Byte*/ { /* if (StellenAnzahl<9) goto Ueberlauf;*/ if (StellenAnzahl>10) for(StellenWert=10;StellenWert=1000000000;ULongZahl -=1000000000) ++StellenWert; if(StellenWert) if (StellenAnzahl<10) goto Ueberlauf; if (StellenAnzahl>=10) *ASCIZiel++ = StellenWert+'0'; LongZahl = ULongZahl; for (StellenWert = 255;LongZahl>=0;LongZahl-=100000000) ++StellenWert; LongZahl+=100000000; if(StellenWert) if (StellenAnzahl<9) goto Ueberlauf; if (StellenAnzahl>=9) *ASCIZiel++ = StellenWert+'0'; weiter123TL: for (StellenWert = 255;LongZahl>=0;LongZahl-=10000000) ++StellenWert; LongZahl+=10000000; if(StellenWert) if (StellenAnzahl<8) goto Ueberlauf; if (StellenAnzahl>=8) *ASCIZiel++ = StellenWert+'0'; for (StellenWert = 255;LongZahl>=0;LongZahl-=1000000) ++StellenWert; LongZahl+=1000000; if(StellenWert) if (StellenAnzahl<7) goto Ueberlauf; if (StellenAnzahl>=7) *ASCIZiel++ = StellenWert+'0'; for (StellenWert = 255;LongZahl>=0;LongZahl-=100000) ++StellenWert; LongZahl+=100000; if(StellenWert) if (StellenAnzahl<6) goto Ueberlauf; if (StellenAnzahl>=6) *ASCIZiel++ = StellenWert+'0'; for (StellenWert = 255;LongZahl>=0;LongZahl-=10000) ++StellenWert; LongZahl+=10000; if(StellenWert) if (StellenAnzahl<5) goto Ueberlauf; if (StellenAnzahl>=5) *ASCIZiel++ = StellenWert+'0'; ShortZahl = LongZahl; goto weiterVonL; } else /*eine Zahl 0x00ffffff ->16777215*/ { if (StellenAnzahl<5) goto Ueberlauf; if (StellenAnzahl>8) for(StellenWert=8;StellenWert