[MUSIK SPELA] DAVID J. MALAN: Okej. Detta är CS50, och detta är slutet på vecka fyra. Och ett av ämnena i dag är det av digital kriminalteknik, konsten att återvinna information. Och faktiskt, även om du är mitt just nu om fred på tre och Breakout, nästa vecka, Man kommer att fokusera på just detta område. Så en av de coolaste jobb jag någonsin hade var tillbaka i forskarskolan, när jag arbetade för den lokala Middlesex County District Attorney: s kontor, gör kriminalteknik fungerar. Så i huvudsak, Massachusetts Statliga polisen, ibland, när du arbetar med ärenden skulle ta in saker som hårddiskar och disketter och minneskort och liknande. Och de skulle lämna dem till mig och min mentor, och vårt mål var att hitta bevis, om det fanns någon på dessa medier. Nu kanske du har sett glimtar i denna värld av kriminalteknik i media, tv och film. Men det jobb jag hade, och daresay den världen, inte riktigt som du skulle se den. Låt oss ta en titt på vad Du har säkert sett. [VIDEOAVSPELNING] -OK. Nu, låt oss få en bra titt på dig. [MUSIK SPELA] -Vänta Den. Kör det tillbaka. -Vänta. Gå höger. -Där. Frysa det. -Full Skärmen. -OK. Frysa det. -Tighten Upp på det, kommer du? -Vector In på att killen av bakhjulet. -ZOOM In just här på denna plats. -Med Rätt utrustning, det Bilden kan förstoras och skärpas. Vad är det? -Det Är ett Enhancement Program. Kan du klart att upp någon? Jag vet inte. Låt oss förbättra den. -Enhance Avsnitt A6. Jag förbättrade detaljerna, och-- Jag tror att det finns tillräckligt för att förstärka. Släpp det till min skärm. Jag förbättrade reflektionen i ögat. -Låt Drivs detta genom videoförbättring. -Edgar Kan du förbättra detta? -Hang På. -Jag Har arbetat med detta reflektion. -Det Finns någons reflektion. -Reflection. -Det Finns en återspegling av mannens ansikte. -The Reflektion! -Det Är en reflektion. -ZOOM I på spegeln. Du kan se en reflektion. Kan du förbättra bilden härifrån? Kan du förbättra den? Kan du förbättra den? -Kan Vi förstärka denna? Kan du förbättra den? -Vänta En sekund. Jag ska öka. -ZOOM I på dörren. -Tider 10. -ZOOM. -Flytta I. -Mer. Vänta, sluta. Stopp. -Pause Den. -Rotate Oss 75 grader runt den vertikala, tack. Stopp. Gå tillbaka till den del om dörren igen. -Har En bildförstärkare som kan bitmapp? -Kanske Vi kan använda Pradeep Singh metod för att se in i fönstren. -Den Programvara är state of the art. -The Egenvärde är av. -Med Höger kombination av algorithms-- -Han Taken belysning algoritmer till nästa nivå, och jag kan använda dem för att förstärka detta fotografi. -Lock På och förstora den z-axeln. -Enhance. Förbättra. -Enhance. -Freeze Och förbättra. [END VIDEOAVSPELNING] DAVID J. MALAN: Så de är alla ord, men de var inte används i meningar på rätt sätt. Och faktiskt i framtiden, helst snälla, hör du någon säga ordet, "Öka", skrocka bara lite. Därför att när du försöker förbättra, till exempel, är det vad som händer. Så här är en underbar bild. Detta är CS50 egen Daven. Och anta att vi ville fokusera på glimten i ögat, eller reflektion av skurk som var klart fångas av övervakningskamera. Detta är vad som händer när du zoomar in på en bild som har endast ett ändligt antal bitar som är förknippade med den. Det är vad du skulle få. Och faktiskt, i Daven öga är men fyra, kanske sex pixlar att komponera exakt vad var glimmande där. Så Problem Set Fyra i slutändan kommer att ha du utforska denna värld, i synnerhet som på grund av något vi kallar fil I / O, där i / o är bara ett finare sätt att säger ingång och utgång. Så hittills samtliga interaktioner Vi har haft med en dator har i stort sett med tangentbordet och skärmen, men inte så mycket med hårddisken, eller spara filer utöver de som du själv skriver. Dina program hittills har inte att skapa och spara, och uppdatera sina egna filer. Tja, vad är en fil? Tja, ungefär som en JPEG. Detta är en bild som du kanske har eller ladda upp till Facebook, eller se någonstans på webben. I själva verket, det fotot vi bara Sågen av Daven var en JPEG. Och vad som är intressant om filer som JPEG-bilder är att de kan identifieras, typiskt, genom vissa mönster av bitar. Med andra ord, vad är det som skiljer en JPEG från en GIF från en PING från ett Word dokument från en Excel-fil? Tja, det är bara annorlunda mönster av bitar. Och dessa olika mönster är vanligtvis i början av dessa filer. Så att när datorn öppnar ett Word doc eller när en dator öppnar en JPEG, det ser typiskt vid första flera bitar i filen. Och om den känner igen ett mönster, den säger, åh, det här är en bild. Låt mig visa det till användaren som grafik. Eller, åh, det här ser ut som ett Word-dokument. Låt mig visa det för användaren som en uppsats. Så till exempel JPEG, visar det sig, är ganska sofistikerad under huven. Men de tre första byte i mest varje JPEG börja med dessa tre nummer. Så byte noll, ett och två är i mest varje JPEG, 255, sedan antalet 216, sedan antalet 255. Och vad kommer du att kunna att börja göra nästa vecka faktiskt peta nedanför huven på filer som JPEG-bilder och liksom bitmapp-filer, och ser vad alltid funnits där så länge som ni har varit med hjälp av en dator. Men vad är det inte normalt skriven som decimaltal som denna. Datavetare inte tenderar att tala i decimal. De inte riktigt tala i binärt. Typiskt, när vi vill att uttrycka siffror, vi faktiskt använder hexadecimal, som ni kanske minns från, säg, Problem Set En, som utmanade dig att tänka på ett annat system. Vi, naturligtvis, känner med decimal, noll till nio. Vi pratade om binärt. Och vi har egentligen inte att använda det mycket här på ut, eftersom datorer kommer att använda den. Men programmerare kommer mycket Ofta, men inte alltid, använder hexadecimal, som just innebär du har 16 bokstäver i ditt alfabet, i motsats till två eller 10. Så hur du räknar till högre än nio i hexadecimal? Du går 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, bara genom konventionen. Men vad är nyckeln är att varje av dessa är en enda symbol. Det finns ingen 10. Det finns ingen 11, per se, eftersom varje av dina siffror, precis som i decimal och precis som i binär, bör bara vara en enda karaktär, enligt konvention. Så att då är alfabetet vi har till vårt förfogande för hexadecimal. Så vad gör en JPEG se ut om du skulle skriva ut dem första tre bytes inte som decimala men, exempelvis som hexadecimal? Och varför är hex ens allt det användbart? Tja, en snabb titt på ett exempel. Så om jag skriver ut de bitar som representera dessa decimal numbers-- detta kan vara lite rostig nu från ett par veckor tillbaka, men vänster en och rätta är ganska lätt. 255 var det största antalet som vi kunde representera med åtta bitar. Det var alla ettor. Så det enda som är milt intressant är den i mitten. Och om du typ av gör ut math, kommer du dra slutsatsen att, ja, att mönstret av en och nollor representerar 216. Så låt oss bara föreskrivas för nu att dessa är korrekta. Men varför är detta intressant? Tja, ett byte, naturligtvis, är åtta bitar. Och det visar sig att om du tror av en byte som två bitar av fyra bitar, så här. Låt mig bara lägga till lite utrymme. Så innan, efter. Jag har precis lagt till några blank för visualisering skull här. Hur kan vi nu står i, säg, hexadecimal varje quad bitar, varje uppsättning av fyra bitar? Så till exempel, på den vänstra Nu har vi 1111 i binär. Vad är det numret i decimal, om du gör ut matten? Du har de plats, tvåor platsen, de fyra rum, och åttor platsen. PUBLIKEN: 15. DAVID J. MALAN: Det är 15. Så om vi gör åtta plus fyra plus två plus ett, får vi 15. Så jag skulle kunna skriva ner 15 nedan 1111, men hela poängen här är hexadecimal, inte decimal. Så istället för att skriva ner 15, 1-5, Jag kommer att skriva det i hex, som om du tänker tillbaka, om du har noll till f, det som 15 kommer att bli? PUBLIKEN: f. DAVID J. MALAN: Så det visar sig att det är f. Och du kan arbeta ut det genom att säga, Tja, om en är 10, så OK, f 15. Så ja, kan vi skriva denna samma uppsättning nummer som f f. Och om vi gör lite matte, vi dra slutsatsen att det är d. Åtta är ganska lätt, eftersom vi har en i åttor plats. Och sedan har vi ett par mer f f-talet. Så vad människor tenderar att göra av konvention när de använder hexadecimal är de bara skriver detta lite mer kortfattat, bli av de flesta som blank. Och bara för att vara super klart för läsare att detta är hexadecimal, den enkla konventionen bland människa är du skriver noll x, som inte har någon annan betydelse än en visuell identifierare, här kommer en hex nummer. Och sedan sätta dig de två siffrorna, f f i detta fall, då d en, sedan f f. Så lång historia kort, hexadecimalt bara tenderar för att vara användbar, eftersom var och en av dess siffror, noll genom f, perfekt linjer upp med ett mönster av fyra bitar. Så om du har två hexadecimala siffror, noll till F, och om igen, som ger dig perfekt åtta bitar eller en byte. Så det är därför den tenderar att vara konventionellt användbara. Det finns ingen intellektuell innehåll verkligen utöver det, annat än dess faktiska användbarhet. Nu JPEG är inte den enda filformat för grafik. Du kanske kommer ihåg att det finns filer så här i världen, åtminstone från ett par år tillbaka. Så detta var faktiskt installeras i Windows XP på miljontals datorer världen runt. Och detta var en bitmapp-fil, BMP. Och en bitmap-fil, som du ser bredvid vecka, betyder bara ett mönster av prickar, bildpunkter som de kallas, En karta i bitar, verkligen. Så vad är intressant, dock, om det här filformatet BMP är att under huven, det har mer än bara tre bytes att komponera sin header, så att tala, de första bites. Det ser faktiskt lite komplicerat vid första anblicken. Och du kommer att se detta i P set. Och få något särskilt ur detta nu är inte så viktigt, eftersom bara det faktum att i början av varje bitmap fil, ett grafiskt format, det finns en massa siffror. Nu Microsoft, författare till detta format, tenderar att kalla dem saker inte Ints och tecken och flyter utan ord och d ord och längtar och bytes. Så de är bara olika datatyper. De är olika namn för samma sak. Men du kommer att se att i P Set Four. Men detta är bara för att säga att om en människa dubbelklickar vissa .BMP fil på hans eller hennes hårddisk, och ett fönster öppnas upp att visa honom eller henne den bilden, som hände eftersom operativsystemet systemet förmodligen märkte inte bara den BMP filändelsen i filnamnet, men också det faktum att det finns en del konvention till mönstret av bitar i början av denna bitmap-fil. Men låt oss nu fokusera på sådan komplicerad fil, utan i stället på något sånt här. Antag här i GEdit jag bara början av ett program som är ganska enkelt. Jag har lite ingår upp överst. Nu har jag # include "structs.h" men Jag ska återkomma till detta strax. Men detta är användbart för nu. Så det här är ett program som kommer att genomföra som registrar databas. Så en databas av studenter, och varje elev i världen har ett namn och ett hus och troligen några andra saker, men vi ska hålla det enkelt. Varje student har ett namn och ett hus. Så om jag ville skriva en program vars syfte i livet var bara att iterera från noll på upp till tre, om det finns tre elever vid Harvard University. Och jag vill bara få hjälp GetString, varje elevs namn och hus, och sedan bara skriva dem ut. Detta är ungefär som vecka Ett, Vecka två saker nu, där jag vill bara ha en för loop eller något liknande. Och jag vill ringa GetString några gånger och sedan skriva ut f några gånger. Så hur kan jag göra detta, dock, när både ett namn och ett hus är involverade för varje elev? Så min första instinkt kanske vara att göra något liknande. Jag skulle först säga, ja, ge mig, säga en array med strängar som kallas namn. Och jag vill inte ha en hårdkoda tre här. Vad vill jag sätta dit? Så att eleverna, eftersom det är bara en konstant deklareras vid toppen, bara så jag inte behöver hårdkoda tre på flera ställen. På så sätt kan jag ändra det ett ställe, och det påverkar en förändring överallt. Och då kanske jag gör sträng inrymmer STUDENTER. Och nu kan jag göra något liknande for (int i = 0; i