Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  9 813
Leser for tiden C#, og har kommet til konvertering. Jeg skjønner hvordan jeg skal konvertere, i hvert fall sånn omtrent - men jeg skjønner ikke hvorfor? I hvilke tilfeller er konvertering fra feks char til int nyttig?
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
I tilfellet du (eller .Net-framework) har en funksjon som bare tar char[] og ikke string, for eksempel. Eller char og ikke byte. Eller int og ikke byte, you name it. Ofte har funksjonen flere overloads så den støtter forskjellige inputtyper uten at du må caste, men ofte er det ingen overloads og da blir du nødt til å sørge for at den får inn den typen den skal ha.
Sist endret av robhol; 11. august 2008 kl. 10:36.
Jeg lagde just et program der jeg trengte konvertering av stringer.
Det henter ut cpu temp fra smnp som en string. For å kunne kjøre dette i if løkker måtte jeg konvertere stringen til int slikt at jeg kan bruke if (cputemp > maxtemp).
Uten konvertering til int vil den ikke klare å telle oppover, slik jeg har skjønt det værtfall.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Selvfølgelig ikke, man regner ikke med string. Prøv:

Kode

 int x = "42"; // Exception på boks
 int y = int.Parse("42"); // Fungerer bra så lenge det er et gyldig tall.
Hvis du f.eks vil lowercase en char. Så konverterer du den til int, legger til 32 og konverterer tilbake. Voila!

Før du gjør det bør du selvfølgelig forsikre deg om at bokstaven er uppercase i utgangspunktet. Da konverterer du den til int og ser at den har verdi mellom 65 og 91.
ओम नमो नारायण
Dodecha's Avatar
DonorCrew
Sitat av fuzzy76
Hvis du f.eks vil lowercase en char. Så konverterer du den til int, legger til 32 og konverterer tilbake. Voila!

Før du gjør det bør du selvfølgelig forsikre deg om at bokstaven er uppercase i utgangspunktet. Da konverterer du den til int og ser at den har verdi mellom 65 og 91.
Vis hele sitatet...
Skjønner at det er et eksempel på type konvertering, men er det ikke lettere å bruke funskjoner som tolower(); og toupper(); i praksis?
For slike enkle eksempler ja, men det er ikke alle ting i verden c# har ferdigfunksjoner for.

Et annet eksempel er slik som mrglass og robhol nevner, parametre får du som regel inn som tekst (via kommandolinje eller textfelter i et vindu). Men om du da vil bruke dem til kalkulasjoner er du nødt til å konvertere dem først.
Trådstarter
Sitat av mrglass
Jeg lagde just et program der jeg trengte konvertering av stringer.
Det henter ut cpu temp fra smnp som en string. For å kunne kjøre dette i if løkker måtte jeg konvertere stringen til int slikt at jeg kan bruke if (cputemp > maxtemp).
Uten konvertering til int vil den ikke klare å telle oppover, slik jeg har skjønt det værtfall.
Vis hele sitatet...
Men hvorfor hentet du ikke ut verdien som int i utgangspunktet?
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Miss M
Men hvorfor hentet du ikke ut verdien som int i utgangspunktet?
Vis hele sitatet...
Fordi SNMP-klienten hans ikkje har konsept om datatyper antar eg. Sjølv om SNMP i utgangspunktet har tre datatyper er det ikkje sikkert klienten eller serveren enkoder det rett. Det må du venne deg til å sjekke.

Bedre eksempel hadde antakeleg vore floats - en datatype som ikkje finst i SNMP-protokollen. Det blir overført som octet - byte for byte - og vil antakeleg bli tolka som en string av dei fleste SNMP-bibliotek. Då må det castast til en float før du eventuelt kan hærpe rundt med det.

Anna eksempel er websider, der du henter ut info. Det er ingen mime-type for int, så Korrekt Adferd(TM) fra HTTP-serveren er å sende det som tekst. Då må du caste det til en int før du bruker det.

Og for å forklare forskjellen: du ser talla 200 på skjermen. Det kan vere to ting. Det kan vere 0110010 0110000 0110000 - altså lagra som tekst iht. ASCII-tabellen, eller det kan vere tallet 11001000. Mao - det blir oppbevart på forskjellige måter i minnet.
Trådstarter
Sitat av slashdot
Fordi SNMP-klienten hans ikkje har konsept om datatyper antar eg. Sjølv om SNMP i utgangspunktet har tre datatyper er det ikkje sikkert klienten eller serveren enkoder det rett. Det må du venne deg til å sjekke.
Vis hele sitatet...
og det er dette som sjekkes når jeg sjekker for overflowing på denne måten:
destinationVar = checked((byte)sourceVar); ?

Takker for god hjelp i forrige svar