Konverter variabel til Array i C

H

Hjelp

Guest
Hei,

Noen vite hvor å konvertere variabelen til matrise elementene?

Ex.
int Var = 12345;

etter konvertert:

røye VarAry [] = ("12345"), eller
røye VarAry [] = ('1 ', '2', '3 ', '4', '5 ');

2Q: Hvordan kan vi direkte vite hvor mange sifre som vi har i Var?Derfra kan vi vite vi fikk 5digits.

Vennligst guide meg hvordan å skrive C program ...

Takk.

 
Den enkel løsning er å bruke sprintf.Det vil gjøre konverteringen og fortelle deg hvor mange tegn det skrev.Imidlertid er sprintf stort.Hvis du trenger en liten funksjon, sjekke kompilatoren biblioteket for å se om det gir en int-til-streng funksjon.Hvis det fremdeles nei lykken, kan noen sikkert hjelpe deg å skrive en.

Jeg kan tenke på et par måter å beregne antall sifre tidligere gjør konvertering:
1.En rekke sammenligninger: Er det større enn 9?Større enn 99?Større enn 999?
2.Hvis tallet er større enn null, beregn 1 gulv (log10 (Var))
Sist endret av echo47 den 15 november 2006 6:24, endret 1 gang totalt

 
Hei,

echo47 skrev:Jeg kan tenke på et par måter å beregne antall sifre tidligere gjør konvertering:

1.
En rekke sammenligninger: Er det større enn 9?
Større enn 99?
Større enn 999?

2.
Hvis tallet er større enn null, beregn 1 gulv (log10 (Var))
 
Her er et eksempel på sprintf metoden:

Kode:

# Include <stdio.h>int main (void)

(

int tall, Var = 12345;

røye VarAry [20];siffer = sprintf (VarAry, "% d", Var);

printf ("Var =% d VarAry =% s siffer =% d \ n", Var, VarAry, sifre);

return 0;

)
 
Hei,

Takk for din prøveprogrammet.Det veldig nyttig.Takk mye.

Det sprintf er stor.Har dere noen alternativ måte bare for å finne ut hvor mange sifre som Var har?

Takk.
Sist endret av Hjelp på 15 november 2006 10:43, endret 2 ganger totalt

 
Kanskje gjøre noe som dette:
Kode:

usignert decimal_digits (usignerte var)

(

if (var <= 9) returnere 1;

if (var <= 99) tilbake 2;

if (var <= 999) tilbake 3;

if (var <= 9999) tilbake 4;

if (var <= 99999) tilbake 5;

return 0; / * feil, har jeg kun fem fingre på hånden * /

)
 
echo47 skrev:

Kanskje gjøre noe som dette:Kode:

usignert decimal_digits (usignerte var)

(

if (var <= 9) returnere 1;

if (var <= 99) tilbake 2;

if (var <= 999) tilbake 3;

if (var <= 9999) tilbake 4;

if (var <= 99999) tilbake 5;

return 0; / * feil, for mange sifre * /

)
 
Jeg forstår ikke din bekymring om "konstant verdi".Hvis du ringer decimal_digits med 42539, går den tilbake "5".Selvfølgelig, hvis du ønsker å måle verdier høyere enn 99999, må du legge til flere "hvis"-utsagn.

Det er umulig å si om det er den mest effektive måten å kode funksjonen.Jeg vet ikke din prosessortype, eller kompilator type, eller typiske verdier for "var".Selv om jeg visste disse tingene, jeg sannsynligvis ikke har kompilatoren for å teste.

Du kan bruke strlen for å måle lengden på en streng.Du ønsker ikke sizeof.

 
Hei,

Beklager, nå så jeg forstår allerede.Takk.

Så det er jo bedre er måten bruke "hvis" utsagn til verifisert tallene.Flere raskere tror jeg.

Jeg skriver på 8051 UC-koden, som ved hjelp av C-språk.Jeg bruker Keil kompilatoren.Det er veldig bra compiler, kan den simulere koden hvert trinn i elap tid.Det er derfor en gang jeg vil pleie hastigheten mens du kjører koden ruting og programmet størrelsen fordi UC interne minnet fikk begrensning.

Har dere noen ide ..å konvertere variabelen til String?

Tusen takk.

 
Hva gjør du trenger er standard C Library funtion itoa, hvis kompilatoren ikke støtter itoa, kan du bygge din egen itoa som dette:
Kode:# Include <string.h>

void itostr (unsigned int val, unsigned char * resultat)

(

statiske røye buf [32] = (0);

int i = 30;for (; Val & & jeg, - i, Val / = 10)

buf = "0123456789" [val% 10];

strcpy (resultat, og buf [i 1]);

)
 
Noen kompilatorer gi en itoa (eller lignende)-funksjonen, men det er ikke en standard ANSI C funksjon.Hvis du bruker den, må du huske at koden ikke kan være bærbare til andre kompilatorer.

For andre konvertering eksempler, se "Google Groups" søkeadresse ovenfor.

 
Hei,

Kode:# Include <string.h>

void itostr (unsigned int val, unsigned char * resultat)

(

statiske røye buf [32] = (0);

int i = 30;for (; Val & & jeg, - i, Val / = 10)

buf = "0123456789" [val% 10];

strcpy (resultat, og buf [i 1]);

)
 
Det itostr "-funksjonen returnerer ingenting (det er erklært" ugyldig ").Men, skriver det en streng inn røya array pekes til av "resultatet".Her er et eksempel ringer funksjon:

Kode:

# Include <stdio.h>

int main (void)

(

usignert Var = 12345;

røye VarAry [32];itostr (Var, VarAry);

printf ("Var =% u VarAry =% s \ n", Var, VarAry);

return 0;

)
 
echo47 skrev:

'Itostr' er ineffektivt.
Jeg anbefaler rense den opp før du bruker den for mye arbeid.
 
Det fungerer, men det er lite effektivt:
1.Det skriver strengen i en midlertidig buffer, og deretter kopierer den midlertidige buffer til output buffer, i stedet for bare å skrive strengen direkte inn i produksjonen buffer.
2.Jeg bruker 32 byte data minnet selv når funksjonen ikke er i gang.
3.Det krever to avdelinger per utgang karakter, med mindre kompilatoren er Optimizer er veldig smart.(Divisjon er vanligvis en dyr operasjon.) Skal finne ut hvor smart det Optimizer er, kan du undersøke sitt assembler utgang.

 
Hei,

Takk for din gode forklaring.Fra din forklaring ser det ut til bare å bruke dataene til å lagre i minnet lagring og tok mye tid å passere verdien fra bufferen.

Har du fått noen gode ideer?Hvordan kan vi gjøre det mer effektivt?Jeg søk fra Google Grupper, det fikk noen eksempel, men det tok lengst tid for gjennomføring.
ex1:
Kode:

char * itos (char * s, int i)

(Char * r = s;

int t;

if (i <0)

(I =-i;

* S = '-';

)

t = i;

do

S;

mens (t / = 10);* S = '\ 0';do

*-- S = '0 ' i% 10;

mens (i / = 10);avkastning s;

)
 
Au!De to krever opptil tre divisjoner per tegn, avhengig av optimizermikrofon kvalitet.

Ytelse avhenger av CPU type og optimere kvaliteten.Hvilken CPU og kompilator er bruker du?Kanskje noen er her kjent med et bestemt kombinasjon.

Sjekk din kompilatoren dokumentasjon for å se om det gir en egnet godt optimalisert bibliotek funksjon.

 
Hei,

Jeg bruker AT89C52 Microcontroller og Compiler Keil det jeg bruker.Min kompilatoren har ikke den funksjonen kun har data-Convertion (f.eks: Konverterer en streng til en float, Konverterer en streng til en int og så videre).

Takk igjen ....

 

Welcome to EDABoard.com

Sponsor

Back
Top