C: Ta reda på antal element i en array som är > 0
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
C: Ta reda på antal element i en array som är > 0
Hej!
Jag har en array som ser ut så här -> unsigned short buffer_send[63];
där unsigned short är 1 byte stor.
Om jag kör sizeof() på arrayen så svarar den med antal element i arrayen men finns det något enkelt sätt att enbart räkna de element som är mer än 0 (>0) ?
Jag har en array som ser ut så här -> unsigned short buffer_send[63];
där unsigned short är 1 byte stor.
Om jag kör sizeof() på arrayen så svarar den med antal element i arrayen men finns det något enkelt sätt att enbart räkna de element som är mer än 0 (>0) ?
Re: C: Ta reda på antal element i en array som är > 0
Förutom det uppenbara att loopa igenom bufferten och kolla varje element för sig - nej.
/j
Kod: Markera allt
int c=0;
for(int i=0;i<sizeof(buffer_send);i++)
if(buffer_send[i]) c++;
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: C: Ta reda på antal element i en array som är > 0
Hmm, ja det var ju synd.
Tycker det är lite klurigt när man håller på med "stora" arrayen, det blir ett himla loopande hela tiden. Det kanske är vanligt även för er?
Ps. Lite roligt när du skriver ett sånt inlägg johano. Den där kodsnutten tar mig lång tid att få ihop och du verkar skriva den från huvet Ds
Tycker det är lite klurigt när man håller på med "stora" arrayen, det blir ett himla loopande hela tiden. Det kanske är vanligt även för er?
Ps. Lite roligt när du skriver ett sånt inlägg johano. Den där kodsnutten tar mig lång tid att få ihop och du verkar skriva den från huvet Ds
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: C: Ta reda på antal element i en array som är > 0
Alternativt kan du ju ha en egen variabel som anger hur många av tecknen i din buffert som ska sändas. En fördel med en sådan lösning är att den fungerar för alla värden på det som finns i bufferten. Rätt vad det är uppstår behovet av att kunna skicka NUL.
Re: C: Ta reda på antal element i en array som är > 0
Tja, har ju jobbat aktivt med programmering i +25 år så lite har väl satt sig
Det finns liksom inga genvägar, antingen gör du loopen själv eller använder någon smart funktion som gör den åt dig
/j
Det finns liksom inga genvägar, antingen gör du loopen själv eller använder någon smart funktion som gör den åt dig
/j
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: C: Ta reda på antal element i en array som är > 0
Ok, då förstår jag.
Hehe, 25 års erfarenhet med programmering. Jäklar i havet
@Jan Almqvist:
På en del andra ställen i koden så håller jag reda på "vart jag är" i arrayen men just den här frågan uppkom då jag vill skriva 0 till samtliga element som inte är det.
Tänkte spara lite tid om då tex endast dom 2 första elementen var > 0 så behövde jag inte loopa igenom hela. Men det är nog bäst att göra det ändå. Vill absolut inte ha några falska bitar inför en ny skrivning.
Tackar för svaren!
Hehe, 25 års erfarenhet med programmering. Jäklar i havet
@Jan Almqvist:
På en del andra ställen i koden så håller jag reda på "vart jag är" i arrayen men just den här frågan uppkom då jag vill skriva 0 till samtliga element som inte är det.
Tänkte spara lite tid om då tex endast dom 2 första elementen var > 0 så behövde jag inte loopa igenom hela. Men det är nog bäst att göra det ändå. Vill absolut inte ha några falska bitar inför en ny skrivning.
Tackar för svaren!
Re: C: Ta reda på antal element i en array som är > 0
Om du bara vill "nolla" ut alla element i arrayen finns enklare sätt:
Fast, oss emellan, den använder också internt en loop
/j
Kod: Markera allt
memset(buffer_send, 0, sizeof(buffer_send));
/j
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: C: Ta reda på antal element i en array som är > 0
Ja men det ser väldigt snyggt ut jämfört med mina for-loopar. Det kör vi på. Tack!
Re: C: Ta reda på antal element i en array som är > 0
Det tar längre tid att kolla om ett element är icke-noll och sedan nolla det än att bara nolla rubbet.
Re: C: Ta reda på antal element i en array som är > 0
Tänkte bara påpeka att en unsigned short inte är 1 byte. Den är minst två bytes beroende på processor, men inte mindre än 2.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: C: Ta reda på antal element i en array som är > 0
Så här säger MikroC Pro for PIC:s hjälp:
Kod: Markera allt
Type Size in bytes Range
unsigned short (int) 1 0 .. 255
Re: C: Ta reda på antal element i en array som är > 0
Minsann! Men din andra tråd verkar eventuellt motbevisa det
C-standarden säger iaf minst 16 bitar:
https://en.wikipedia.org/wiki/C_data_types
C-standarden säger iaf minst 16 bitar:
https://en.wikipedia.org/wiki/C_data_types
Re: C: Ta reda på antal element i en array som är > 0
Som referens kan noteras att XC8 anger:
Om det finns en "unsigned char" i MikroC så kan den vara
bättre med tanke på eventuell portning senare till XC8.
Kod: Markera allt
signed char 8 Signed integer
unsigned char 8 Unsigned integer
signed short 16 Signed integer
unsigned short 16 Unsigned integer
bättre med tanke på eventuell portning senare till XC8.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: C: Ta reda på antal element i en array som är > 0
Det här blev tokigt. Nu handlar båda trådarna om samma sak.
Svarar i den andra tråden (Vad är det som äter RAM), då den här diskussionen inte riktigt har med det här ämnet att göra.
Svarar i den andra tråden (Vad är det som äter RAM), då den här diskussionen inte riktigt har med det här ämnet att göra.
Re: C: Ta reda på antal element i en array som är > 0
Varibellängden beror på vilken C-version du väljer.
I K&R (det är ålderstiget men används ibland) så är en short int <= int så där kan det vara 8 bitar eller 16 eller 32.
Bäst är att göra sina portabla varibeltyper som INT8, INT16 osv så kan man enkelt porta koden mellan olika hårdvara och kompilatorer. Aldrig använda sig C-typer som int, char osv.
I K&R (det är ålderstiget men används ibland) så är en short int <= int så där kan det vara 8 bitar eller 16 eller 32.
Bäst är att göra sina portabla varibeltyper som INT8, INT16 osv så kan man enkelt porta koden mellan olika hårdvara och kompilatorer. Aldrig använda sig C-typer som int, char osv.