| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | int om til string Fra : Flemming Hansen | 
  Dato :  13-01-06 20:23 |  
  |   
            Hej,
 
 Jeg vil skrive nogle målte værdier ud på 3 7-segments LED display. Det
 kræver så at jeg skal lave int værdier om til ikke-ASCII-string. Jeg har
 lavet en simpel funktion der hedder:
 
 printLED(int tal)
 {
     unsigned char x[5];
     unsigned char i;
 
     sprintf(x, "%d", tal);
     for(i=0; i<4; i++)
    {
         x[i] = x[i] - '0';
    }
 }
 
 Men problemet er bare at når jeg sender tallet 123 ind så kommer der 321,
 altså i omvendt rækkefølge. Hvordan kan jeg vende rækkefølgen i x[] på en
 smart og nemt måde? På forhånd tak.
 
 
  
            
             |   |   
            
        
 
            
         
           Mogens Hansen (13-01-2006) 
         
	
            | Kommentar Fra : Mogens Hansen | 
  Dato :  13-01-06 21:33 |  
  |   
            
 "Flemming Hansen" <fatih@ofir.dk> wrote in message 
 news:43c7fe2d$0$67257$157c6196@dreader2.cybercity.dk...
 
 [8<8<8<]
 > Men problemet er bare at når jeg sender tallet 123 ind så kommer der 321,
 > altså i omvendt rækkefølge.
 
 Hvordan ser du det ?
 Du kunne iøvrigt overveje at bruge heltalsdivision og modulo.
 
 > Hvordan kan jeg vende rækkefølgen i x[] på en
 > smart og nemt måde?
 
 I C++: brug "std::reverse"
 
 Venlig hilsen
 
 Mogens Hansen 
 
 
  
            
             |   |   
            
        
 
            
         
           Flemming Hansen (13-01-2006) 
         
	
            | Kommentar Fra : Flemming Hansen | 
  Dato :  13-01-06 21:58 |  
  |   
            > [8<8<8<]
 > > Men problemet er bare at når jeg sender tallet 123 ind så kommer der
 321,
 > > altså i omvendt rækkefølge.
 >
 > Hvordan ser du det ?
 
 Det er en C code til en PIC18F452, og tallet vises på et 3x7-segment LED.
 LEDen drives med en CPLD (CoolRunner II). Måske en løsning vil lyde "skift
 LEDs rækkefølge", men dette kan ikke lade sig gøre. :) Problemet skal løses
 i C koden. Og jeg kan ikke bruge C++. Jeg kan nok gemme indholdet af x[] ind
 i en anden array med omvendt rækkefølge, men jeg synes det ville være lidt
 dumt
 
 
 
  
            
             |   |   
            
        
 
            
         
            Mogens Hansen (13-01-2006) 
         
	
            | Kommentar Fra : Mogens Hansen | 
  Dato :  13-01-06 22:27 |  
  |   
            
 "Flemming Hansen" <fatih@ofir.dk> wrote in message 
 news:43c8145f$0$67258$157c6196@dreader2.cybercity.dk...
 
 [8<8<8<]
 > Problemet skal løses
 > i C koden.
 
 Lav en funktion der tager en almindelig nul-termineret streng og traverserer 
 den baglæns imens tegnene sendes til 7-segment displayet
 Så behøver du ikke nogen ekstra buffer.
 
 void traverse_backward(unsigned char* p)
 {
    unsigned char* i = p;
 
    if(!p)
       return;
 
    i += strlen(p);
    if(i == p)
       return;
 
    do  {
       --i;
       do_something(*i);
    } while(p != i);
 }
 
 
 > Jeg kan nok gemme indholdet af x[] ind
 > i en anden array med omvendt rækkefølge, men jeg synes det ville være lidt
 > dumt
 
 Du kan vende indholdet ved at bytte (swap) forreste og bageste element, 
 dernæst næst-forreste og næst-bageste element etc.
 
 void swap(unsigned char* c1, unsigned char* c2)
 {
    unsigned char  temp = *c1;
   *c1 = *c2;
   *c2 = temp;
 }
 
 Venlig hilsen
 
 Mogens Hansen 
 
 
  
            
             |   |   
            
        
 
            
         
           Arne Vajhøj (13-01-2006) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  13-01-06 22:20 |  
  |   
            Flemming Hansen wrote:
 > printLED(int tal)
 > {
 >     unsigned char x[5];
 >     unsigned char i;
 > 
 >     sprintf(x, "%d", tal);
 >     for(i=0; i<4; i++)
 >    {
 >         x[i] = x[i] - '0';
 >    }
 > }
 > 
 > Men problemet er bare at når jeg sender tallet 123 ind så kommer der 321,
 > altså i omvendt rækkefølge. Hvordan kan jeg vende rækkefølgen i x[] på en
 > smart og nemt måde? På forhånd tak.
 
 for(i=0;i<2;i++)
 {
     tmp=x[i];
     x[i]=x[3-i];
     x[3-i]=tmp;
 }
 
 Arne
  
            
             |   |   
            
        
 
            
         
           Arne Vajhøj (13-01-2006) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  13-01-06 23:12 |  
  |   
            Arne Vajhøj wrote:
 > Flemming Hansen wrote:
 >> printLED(int tal)
 >> {
 >>     unsigned char x[5];
 >>     unsigned char i;
 >>
 >>     sprintf(x, "%d", tal);
 >>     for(i=0; i<4; i++)
 >>    {
 >>         x[i] = x[i] - '0';
 >>    }
 >> }
 >>
 >> Men problemet er bare at når jeg sender tallet 123 ind så kommer der 321,
 >> altså i omvendt rækkefølge. Hvordan kan jeg vende rækkefølgen i x[] på en
 >> smart og nemt måde? På forhånd tak.
 > 
 > for(i=0;i<2;i++)
 > {
 >    tmp=x[i];
 >    x[i]=x[3-i];
 >    x[3-i]=tmp;
 > }
 
 Skal %d ikke være %04d ?
 
 Arne
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |