/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
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

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste