[Musikk spilles] DAVID J. MALAN: All right. Dette er CS50, og denne er slutten av uke Four. Og et av temaene i dag er at av digital etterforskning, kunsten å utvinne informasjon. Og ja, selv om du er midt akkurat nå of Peace på tre og Breakout, neste uke, fokuset vil være på nettopp dette domenet. Så en av de kuleste jobbene jeg noensinne hadde var tilbake i gradsstudier, da jeg jobbet for den lokale Middlesex County District Attorney kontor, gjør etterforskning fungere. Så egentlig, Massachusetts State Police, til tider, Ved arbeid på tilfeller ville få inn ting som harddisker og disketter og minnekort og lignende. Og de ville overlevere dem til meg og min mentor, og vårt mål var å finne bevis, hvis det var noen, av disse medier. Nå, har du kanskje sett glimt av denne verden av forensics i media, TV og filmer. Men den jobben jeg hadde, og daresay at verden, er ikke helt som du ville se det. La oss ta en titt på hva du har sikkert sett. [VIDEOAVSPILLING] -OK. Nå, la oss få en god titt på deg. [Musikk spilles] -Vent Det. Kjør det tilbake. -Vent Litt. Gå til høyre. -Det. Fryse det. -Full-screen. -OK. Fryse det. -Tighten Opp på det, vil du? -Vector Inn på det fyr ved bakhjulet. Zoome inn her på dette stedet. -Med Riktig utstyr, Bildet kan forstørres og skjerpet. Hva er det? -Det er en forbedring program. Kan du klare det opp noe? Jeg vet ikke. La oss forbedre den. -Enhance Seksjon A6. Jeg forbedret detalj, og-- -Jeg tror det er nok til å forbedre. Slipp den til skjermen min. -Jeg Forbedret refleksjon i øyet hennes. -Vi Kjøre dette gjennom video ekstrautstyr. -Edgar, Kan du forbedre dette? -Heng På. Jeg har jo jobbet med dette refleksjon. -Det Er noens refleksjon. Lysreflekterende. -Det er en refleksjon av mannens ansikt. -The Refleksjon! -Det er en refleksjon. Zoome inn på speilet. Du kan se en refleksjon. Kan du forbedre bildet herfra? Kan du forbedre det? Kan du forbedre det? Kan vi forbedre dette? Kan du forbedre det? -Vent Et sekund. Jeg skal forbedre. Zoome inn på døren. -Times 10. Zoome. -Flytt Inn. -Mer. Vent, stopp. -Slutt. -Pause Det. -Rotate Oss 75 grader rundt den vertikale, takk. -Slutt. Gå tilbake til den delen om døren igjen. -Fikk Et forbedret lydbilde som kan bitmap? Kanskje vi kan bruke Pradeep Singh metode for å se inn vinduene. -Programvaren Er state of the art. -The Egenverdi er av. -Med Høyre Kombinasjonen av algorithms-- Han er tatt belysning algoritmer til det neste nivå, og jeg kan bruke dem til forbedre dette fotografiet. -LOCK På og forstørre z-aksen. -Enhance. Forbedre. -Enhance. -Freeze Og styrke. [END VIDEOAVSPILLING] DAVID J. MALAN: Så de er alle ord, men de var ikke brukes i setninger på riktig måte. Og faktisk i fremtiden, når som helst, vær så snill, hører du noen si ordet, "Forbedre", humrer bare litt. Fordi når du prøver å forbedre, for eksempel, er dette hva som skjer. Så her er en nydelig bilde. Dette er CS50 egen Daven. Og anta at vi ønsket å fokusere på glimt i øyet, eller refleksjonen av bad guy som var tydelig fanget opp av overvåkningskamera. Dette er hva som skjer når du zoome inn på et bilde som har bare et endelig antall bits som er knyttet til den. Det er hva du ville få. Og ja, i Daven øye er, men fire, kanskje seks piksler at komponere nøyaktig hva var glitrende der. Så Problem Set Fire til slutt vil ha du utforske denne verden, spesielt av natur av noe vi kaller fil I / O, hvor i / o er bare en fancy måte å sier input og output. Så så langt, alle interaksjoner vi har hatt med en datamaskin har i stor grad vært med tastaturet og skjermen men ikke så mye med harddisken, eller lagre filer utover de du selv skrive. Programmene så langt har ikke vært å skape, og sparing, og oppdatere sine egne filer. Vel, hva er en fil? Vel, noe som en JPEG. Dette er et bilde du kanskje har eller laste opp til Facebook, eller se hvor som helst på nettet. Ja, det bildet vi bare sag av Daven var en JPEG. Og hva er interessant om filer som JPEG er at de kan bli identifisert, typisk, etter visse mønstre av biter. Med andre ord, hva er det som skiller en JPEG fra en GIF fra en PING fra et Word dokument fra en Excel-fil? Vel, det er bare annerledes mønstre. Og de forskjellige mønstre er vanligvis i begynnelsen av disse filene. Slik at når datamaskinen åpner et Word doc, eller når en datamaskin åpner en JPEG, det ser vanligvis på første flere bits i filen. Og hvis det gjenkjenner et mønster, den sier, oh, er dette et bilde. La meg vise det til brukeren som grafikk. Eller, oh, dette ser ut som et Word-dokument. La meg vise det til brukeren som et essay. Så for eksempel, JPEG, det viser seg, er ganske sofistikert under panseret. Men de tre første byte i de fleste hver JPEG starte med disse tre tall. Så byte null, en, to, og er, i de fleste hver JPEG, 255, deretter nummeret 216, deretter nummeret 255. Og hva vil du kunne å begynne å gjøre neste uke er faktisk poking under panseret på filer som JPEG og som bitmap-filer, og se hva har alltid vært der så lenge som du har vært å bruke en datamaskin. Men hva er det ikke typisk skrevet som desimaltall som dette. Dataforskere ikke tendens til å snakke i desimal. De har egentlig ikke snakke i binær. Vanligvis når vi ønsker å uttrykke tall, vi faktisk bruker heksadesimale, som du kanskje husker fra, sier Problem Set One, som utfordret du til å tenke på et annet system. Vi, selvfølgelig, er kjent med desimal, null til ni. Vi snakket om binær. Og vi har egentlig ikke å bruke så mye her på ut, fordi datamaskiner vil bruke det. Men programmerere vil veldig ofte, men ikke alltid, bruke heksadesimale, som bare betyr du har 16 bokstaver i alfabetet, i motsetning til to eller 10. Så hvordan du telle til høyere enn ni i heksadesimal? Du går 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, bare ved konvensjonen. Men kjernen er at hver Av disse er en enkelt symbol. Det er ingen 10. Det er ingen 11, per se, fordi hvert av dine sifre, akkurat som i desimal og akkurat som i binær, bør bare være et enkelt tegn, etter konvensjonen. Så det er da alfabetet vi har til rådighet for heksadesimale. Så hvordan ser en JPEG som om du var å skrive ut de første tre bytes ikke som desimal, men, for eksempel som en heksadesimal? Og hvorfor er hex selv alt som er nyttig? Vel, en rask titt på et eksempel. Så hvis jeg skriver ut biter som representerer disse desimal numbers-- dette kan være litt rusten nå fra et par uker tilbake, men den venstre og den rette er ganske enkelt. 255 var det største antallet vi kunne representere med åtte biter. Det var alle de. Så det eneste som er mildt interessant er den mellomste. Og hvis du slags gjøre ut matte, vil du utlede at, ja, at mønsteret av ett og nuller representerer 216. Så la oss bare fastsette for nå at disse er korrekte. Men hvorfor er dette interessant? Vel, en byte, selvfølgelig, er åtte bits. Og det viser seg at hvis du tror av en byte som to biter av fire biter, som dette. La meg bare legge til noen plass. Så før, etter. Jeg har nettopp lagt inn mellomrom for visualisering skyld her. Hvordan kan vi nå representerer i, si, heksadesimale hver quad biter, hvert sett med fire biter? Så for eksempel, på venstre nå har vi 1111 i binær. Hva er det nummeret i desimal, hvis du gjør ut regnestykket? Du har de plass, toere sted, The Fours sted, og åttere sted. PUBLIKUM: 15. DAVID J. MALAN: Det er 15. Så hvis vi gjør åtte pluss fire pluss to pluss en, får vi 15. Så jeg kunne skrive ned 15 nedenfor 1111, men hele poenget her er heksadesimale, ikke desimal. Så i stedet for å skrive ned 15, 1-5, Jeg kommer til å skrive at i hex, som hvis du tenker tilbake, hvis du har null gjennom f, hva er 15 kommer til å bli? PUBLIKUM: f. DAVID J. MALAN: Så det viser seg at det er f. Og du kan jobbe det ut ved å si: vel, hvis en er 10, så OK, er f 15. Så ja, kan vi omskrive denne samme sett med tall som f f. Og så hvis vi gjør litt matte, vi utlede at det er d. Åtte er ganske lett, fordi vi har en i det ekt sted. Og så har vi et par mer f f-tallet. Så hva mennesker har en tendens til å gjøre etter konvensjonen når de bruker heksadesimale er de bare skrive dette litt mer konsist, kvitte seg med det meste av det hvite området. Og bare for å være super klar til leserne om at dette er heksadesimale, den enkle konvensjonen blant mennesker er du skriver null x, som ikke har noen mening annet enn en visuell identifikasjon av, her kommer en hex tall. Og så setter du de to sifrene, f f i dette tilfellet, så d en, deretter f f. Så lang historie kort, heksadesimale bare har en tendens å være nyttig fordi hver av dens siffer, null gjennom f, perfekt linjer opp med et mønster av fire bits. Så hvis du har to heksadesimale sifre, null gjennom F, igjen og igjen, som gir deg perfekt åtte biter eller én byte. Så det er derfor det har en tendens til være konvensjonelt stoff. Det er ingen intellektuell innholdet virkelig utover det, annet enn den faktiske nytten. Nå JPEG er ikke den eneste filformater for grafikk. Du husker kanskje at det er filer som dette i verden, i hvert fall fra et par år tilbake. Så dette var faktisk installert i Windows XP på millioner av PCer verden rundt. Og dette var en bitmap fil, BMP. Og en bitmap fil, som du vil se neste uke, betyr bare et mønster av punkter, piksler som de heter, Et kart på bits, egentlig. Så hva er interessant, skjønt, om dette filformatet, BMP, er at under panseret, det har mer enn bare tre bytes at komponere sin header, så å snakke, de første par biter. Det faktisk ser litt komplisert ved første øyekast. Og du vil se dette i P sett. Og få noe Spesielt av denne nå er ikke så viktig, så bare det faktum at i begynnelsen av hver bitmap fil, et grafisk format, det er en hel haug med tall. Nå Microsoft, Forfatteren av dette formatet, en tendens til å kalle dem ting som ikke ints og tegn Flyter men ord og d ord og lengter og bytes. Så de er bare forskjellige datatyper. De er forskjellige navn for det samme. Men vil du se at i P Set Fire. Men dette er bare å si at hvis et menneske dobbeltklikker noen BMP-filen på sin eller hennes harddisk, og et vindu åpner opp som viser ham eller henne det bildet, som skjedde fordi drifts Systemet formodentlig merke ikke bare .BMP filtypen i filnavnet, men også det faktum at det er noen konvensjonen til mønsteret av biter helt i begynnelsen av at bitmap fil. Men la oss nå fokusere på slik komplisert fil, men i stedet på noe sånt som dette. Anta her i GEdit, jeg må bare begynnelsen av et program som er ganske enkelt. Jeg har fått noen inkluderer opp toppen. Nå har jeg fått # include "structs.h", men Jeg skal komme tilbake til det i et øyeblikk. Men dette er nyttig for å nå. Så dette er et program som kommer til å implementere som registrar database. Så en database av studenter, og hver elev i verden har et navn og et hus og sannsynligvis noen andre ting, men vi vil holde det enkelt. Hver student har et navn og et hus. Så hvis jeg ønsket å skrive en program hvis formål i livet var bare for å veksle fra null på opp til tre, hvis det er tre studenter ved Harvard University. Og jeg vil bare få ved å bruke GetString, hver elev navn og hus, og så bare skrive dem ut. Dette er liksom som Week One, uke to ting nå, hvor jeg bare vil ha en for løkke eller noe sånt. Og jeg vil ringe GetString noen ganger, og deretter skrive ut f et par ganger. Så hvordan kan jeg gjøre dette, skjønt, når både et navn og et hus er involvert for hver elev? Så mitt første instinkt kanskje være å gjøre noe som dette. Jeg kan først si, vel, gi meg, si, en rekke strenger kalt navn. Og jeg vil ikke ha en hardcode tre her. Hva ønsker jeg å sette det? Slik at studenter, fordi det er bare en konstant erklært på toppen, bare så jeg ikke trenger å hardcode tre på flere steder. På denne måten kan jeg forandre det ett sted, og det påvirker en endring overalt. Og da kan jeg gjøre string huser studenter. Og nå, kan jeg gjøre noe sånt for (int i = 0; i