|
| 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
| |
|
|