HDSoftware Skrevet 13. oktober 2010 Del Skrevet 13. oktober 2010 Heisan folkens Jeg lurer på følgende - i Reflector så ser jeg at TryStringToNumber metoden gjør følgende: internal static unsafe bool TryStringToNumber(string str, NumberStyles options, ref NumberBuffer number, StringBuilder sb, NumberFormatInfo numfmt, bool parseDecimal) { if (str == null) { return false; } fixed (char* str2 = ((char*) str)) { char* chPtr = str2; char* chPtr2 = chPtr; if (!ParseNumber(ref chPtr2, options, ref number, sb, numfmt, parseDecimal) || ((((long) ((chPtr2 - chPtr) / 2)) < str.Length) && !TrailingZeros(str, (int) ((long) ((chPtr2 - chPtr) / 2))))) { return false; } } return true; } Det jeg finner merkelig er dette: (LONG)((chPtr2 - chPtr) / 2) < str.Length <jeg gjør jo noen gjetninger og tenker som så at dette betyr noe slik som: Adressen til chPtr2 minus adressen til chPtr og så deles dette med 2 Spørsmålet er i så fall, hvorfor deles dette på 2? Representeres dataene i minnet med 2 verdier? Er det kansje fordi en CHAR består av 2 bytes? Jeg ville i hvertfall tro det Rart hvordan man plutselig begynner å forstå dette bare ved å skrive et innlegg her på HW ;-) Lenke til kommentar
GeirGrusom Skrevet 13. oktober 2010 Del Skrevet 13. oktober 2010 En char tar to byte. Jeg regner med chPtr2 leter etter slutten av tallet. Men jeg må si jeg er overrasket over en del ting i denne... spesielt bruken av long. Lenke til kommentar
HDSoftware Skrevet 13. oktober 2010 Forfatter Del Skrevet 13. oktober 2010 Tipper de caster til LONG for å støtte strenger som er større en 4 GB Uanset, jeg er veldig usikker på hvorfor en peker til en peker skal gi siste verdi i tallet. jeg klarer liksom ikke helt å se hvorfor dette er en selvfølge AHHH!!! Plutselig skjønte jeg hvorfor! Det første elementet i char pekeren er sikkert lengden til strengen og da går regnestykket opp.. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå