Seite 2 von 2

Re: unsigned int zu char[]

Verfasst: 22.05.2014, 21:43
von DerAlbi
Ich hätte gedacht, man exerziert das mal mit jeder Deziamlstelle druch. Da müsste doch der selbe Code entstehen, nur dass man ihn mit Sprungmarken zwischendrin anspringen kann, um die großen zahlen zu umgehen.
Das ein Einfaches if/else nicht viel bringt, könnt ich nachvollziehen

Re: unsigned int zu char[]

Verfasst: 23.05.2014, 11:01
von BeRsErKeR
Ich hab zufällig was im Netz gefunden, was scheinbar komplett ohne Multiplikation auskommt und stattdessen mehrere Subtraktionen ausführt. Ob das schneller ist, kann ich nicht abschätzen. Die Datentypen muss man entsprechend anpassen. bit scheint einfach ein BOOL zu sein und das code kann man weglassen. In dem Fall geht das nur für 4-stellige Zahlen, aber man kann das TEST-Array und den Wert von i ja anpassen.

Code: Alles auswählen

void outint( int val )
{
  uint code TEST[] = { 10, 100, 1000, 10000 };
  uchar d, i;
  bit zero;
  uint uval = val;

  if( val < 0 ){
    uval = -val;
    putchar( '-' );
  }

  zero = 1;
  i = 4;
  do{
    i--;
    for( d = '0'; uval >= TEST[i]; uval -= TEST[i] ){
      d++;
      zero = 0;
    }
    if( zero == 0 )
      putchar( d );
  }while( i );

  putchar( (uchar)uval + '0' );
}