[Powered by Google Translate] [Walkthrough - 4 Set Problem] [Zamyla Chan - Harvard University] [Mae hyn yn CS50. - CS50.TV] Mae pob hawl. Helo, bawb, a chroeso i Walkthrough 4. Heddiw mae ein pset yn Fforensig. Fforensig yn pset llawn hwyl sy'n golygu delio gyda ffeiliau didfap i ddarganfod pwy cyflawni trosedd. Yna rydym yn mynd i newid maint rhai ffeiliau didfap, yna rydym ni hefyd yn mynd i ddelio gyda rhan llawn hwyl a elwir yn Adfer, lle rydym yn rhoi bôn cerdyn cof lle mae rhywun wedi dileu ddamweiniol i gyd eu ffeiliau, ac rydym yn gofyn i adennill y ffeiliau. Ond yn gyntaf, cyn i ni fynd i mewn i'r pset, Fi 'n sylweddol jyst angen at longyfarch pawb. Rydym am ar bwynt canol y cwrs hwn. Cwis 0 yw tu ôl i ni, ac rydym yn pset4, felly yn y bôn, rydym hanner ffordd. Rydym wedi dod yn bell os ydych yn edrych yn ôl at eich psets, pset0 a pset1, felly llongyfarch eich hun am hynny, ac rydym yn mynd i gael i mewn i rai pethau yn llawer o hwyl. Felly mae ein pecyn cymorth ar gyfer y pset, unwaith eto, yn hytrach na rhedeg sudo yum-y diweddariad, rydym yn gallu jyst hidla update50 os ydych yn y fersiwn 17.3 ac uwch yr offer. Felly byddwch yn sicr o redeg update50 - mae'n haws lot, a chymeriadau ychydig llai - i wneud yn siŵr eich bod ar y fersiwn diweddaraf o'r offer. Yn enwedig, mae'n bwysig i update50 pan fyddwn yn dechrau defnyddio CS50 Gwirio. Felly, gwnewch yn siŵr eich bod yn gwneud hynny. Ar gyfer yr holl adrannau ar gyfer y pset, rydym yn mynd i fod yn delio gyda mewnbwn ffeiliau ac allbynnau, ffeilio I / O. Rydym yn mynd i fod yn mynd dros lawer iawn o raglenni sy'n delio â araeau bwyntio at ffeiliau a phethau fel 'na, felly rydym yn awyddus i wneud yn siŵr ein bod yn wir yn gyfarwydd ac yn gyfforddus ymdrin â sut i mewnbwn ac allbwn i mewn i ffeiliau. Yn y cod dosbarthu ar gyfer y pset yn ffeil o'r enw copy.c, a dyna beth rydym yn mynd i ddod o hyd yn mynd i fod yn ddefnyddiol iawn i ni oherwydd ein bod ni'n mynd i roi diwedd ar i fyny mewn gwirionedd gopïo'r ffeil copy.c a dim ond newid mymryn arni er mwyn gallu cyflawni y 2 rhannau o'r broblem a osodwyd. Ac felly, yna fel y soniais o'r blaen, yr ydym yn delio â bitmaps yn ogystal â JPEG. Felly mewn gwirionedd deall y strwythur o ran sut y ffeiliau yn cael eu trefnu, sut y gallwn wir yn y 0s a 1s i structs a phethau y gallwn mewn gwirionedd yn deall a dehongli a golygu, a fydd yn wirioneddol bwysig, felly roedd mynd i mewn i JPEG a ffeiliau didfap a deall strwythur y rhai. Pset4, fel arfer, yn dechrau gydag adran o gwestiynau. Bydd y rhai yn delio gyda ffeiliau I / O, ac yn mynd â chi gyfarwydd â hynny. Yna rhan 1 yn Whodunit, lle rydych yn cael ffeil bitmap sy'n edrych fath o fel dotiau coch ar hyd a lled. Ac yna yn y bôn yr hyn yr ydym yn mynd i wneud yw cymryd y ffeil a dim ond ychydig yn ei olygu i mewn i fersiwn y gallwn ddarllen. Yn y bôn, unwaith i ni orffen, bydd gennym yr un ffeil, ac eithrio byddwn yn gallu gweld y neges gudd cuddio gan bawb dotiau coch. Yna Newid maint yn rhaglen, o ystyried ffeil ac yna rhoddir enw'r ffeil fod yn allbynnau ac yna rhoddir nifer hefyd, mewn gwirionedd yn newid maint y didfap gan y gwerth cyfanrif. Yna, yn olaf, mae gennym y pset gwella. Rydym yn cael cerdyn cof ac yna rhaid i adennill y cyfan o'r lluniau sydd wedi cael eu dileu ddamweiniol, ond, nid gan y byddwn yn dysgu, dileu mewn gwirionedd ac yn tynnu oddi ar y ffeil; rydym yn unig fath o golli lle roeddent yn y ffeil, ond rydym yn mynd i adfer hynny. Great. Felly, yn mynd i mewn i ffeil gallaf / O benodol, mae'r rhain yn rhestr gyfan o swyddogaethau y byddwch yn eu defnyddio. Rydych eisoes wedi gweld ychydig elfennau sylfaenol fopen, fread, a fwrite, ond rydym ni'n mynd i edrych ymhellach i mewn i rai ffeil gallaf / swyddogaethau O megis fputc, lle 'ch jyst ysgrifennu un cymeriad ar y tro, i fseek, lle rydych yn fath o symud y ffeil dangosydd sefyllfa yn ôl ac ymlaen, ac yna rhai eraill. Ond byddwn yn mynd i mewn i hynny ychydig yn ddiweddarach yn ystod y pset. Felly, yn gyntaf, dim ond i fynd i mewn i ffeil I / O cyn i ni fynd i mewn i'r pset, i agor ffeil, er enghraifft, yr hyn y mae'n rhaid i chi ei wneud yw gosod mewn gwirionedd pwyntydd i'r ffeil. Felly mae gennym FFEIL pwyntydd *. Yn yr achos hwn, rwy'n galw ei wneud yn yn y pwyntydd oherwydd mae hynny'n mynd i fod yn fy infile. Ac felly dwi'n mynd i ddefnyddio'r fopen swyddogaeth ac yna enw'r ffeil ac yna y modd y mae Rydw i'n mynd i fod yn delio gyda'r ffeil. Felly, mae "r" yn yr achos hwn ar gyfer darllen, "w" ar gyfer ysgrifennu, ac yna "a" ar gyfer atodi. Er enghraifft, pan fyddwch yn delio â infile a phob ydych am ei wneud yw darllen y darnau a bytes storio yno, yna mae'n debyg eich bod yn mynd i eisiau defnyddio "r" fel eich dull. Pan fyddwch am i ysgrifennu mewn gwirionedd, yn gwneud math o ffeil newydd, Yna, beth ydym yn mynd i'w wneud yw ein bod yn mynd i agor y ffeil newydd a defnyddio'r "w" modd ar gyfer ysgrifennu. Felly, yna pan fyddwch chi'n mewn gwirionedd yn darllen yn y ffeiliau, mae'r strwythur fel a ganlyn. Yn gyntaf i chi gynnwys y pwyntydd i'r strwythur a fydd yn cynnwys y bytes eich bod yn darllen. Felly, mae hynny'n mynd i fod yn y lleoliad diwedd y bytes eich bod yn darllen. Rydych chi'n wedyn yn mynd i ddangos y maint, fel y bôn faint o bytes eich rhaglen wedi i ddarllen i mewn i'r ffeil, maint y bôn un elfen yw, ac yna rydych chi'n mynd i bennu faint o elfennau rydych am ei ddarllen. Ac yna yn olaf, rhaid i chi wybod ble rydych chi'n darllen, fel bod yn mynd i fod yn eich pwyntydd yn. I lliw-godio rhain oherwydd fread hefyd yn hynod o debyg i fwrite, heblaw eich bod am wneud yn siŵr eich bod yn defnyddio'r drefn gywir, gwneud yn siŵr eich bod mewn gwirionedd yn ysgrifennu at neu ddarllen o'r ffeil cywir. Felly, yna fel o'r blaen, os ydym yn cael y maint yr elfen yn ogystal â nifer o elfennau, yna gallwn chwarae o gwmpas yma ychydig. Dweud Mae gen i strwythur CŴN ac felly, rwyf am i ddarllen dau gi ar y tro. Beth gallwn ei wneud yw dweud y maint o un elfen yn mynd i fod y maint un CŴN ac rydw i'n mynd i mewn gwirionedd yn darllen dau ohonynt. Fel arall, yr hyn y gallwn ei wneud yw dweud Im 'jyst yn mynd i ddarllen un elfen a bod un elfen yn mynd i fod y maint o ddau gi. Felly dyna cyfateb sut y gallwch math o chwarae o gwmpas gyda maint a nifer yn dibynnu ar beth sydd yn fwy greddfol i chi. Mae pob hawl. Felly, yn awr rydym yn cael i ffeiliau ysgrifennu. Pan fyddwch am i ysgrifennu ffeil, mae'r ddadl cyntaf yw mewn gwirionedd yn lle rydych yn darllen. Felly dyna y bôn y data yr ydych yn mynd i ysgrifennu i mewn i'r ffeil, sef y pwyntydd y tu allan ar y diwedd. Felly, pan fyddwch chi'n ymdrin â'r pset, gwnewch yn siŵr nad ydych yn drysu. Efallai fod yr ochr diffiniadau yn ochr. Gallwch dynnu y diffiniadau yn y llawlyfr trwy deipio ddyn ac yna fwrite, er enghraifft, yn y derfynell, neu gallwch gyfeirio yn ôl at y sleid a gwnewch yn siwr eich bod yn defnyddio yr un cywir. Felly, unwaith eto, ar gyfer fwrite, pan fydd gennych ffeil yr ydych am i ysgrifennu i mewn i, mae hynny'n mynd i fod yn y ddadl ddiwethaf ac mae hynny'n mynd i fod yn pwyntydd i'r ffeil. Felly, yna dyna sut yr ydym yn delio gydag ysgrifennu efallai bytes nifer ar y tro, ond yn dweud a ydych dim ond ysgrifennu mewn dim ond un cymeriad unigol. Fel byddwn yn gweld yn nes ymlaen yn yr enghraifft hon, yn y bitmaps bydd rhaid i ni ddefnyddio hynny. Dyna pryd y gallwn ddefnyddio fputc, yn y bôn dim ond rhoi un cymeriad ar y tro, bedyddiwyd, i mewn i'r pwyntydd ffeil, a dyna ein pwyntydd i maes 'na. Felly, yna pryd bynnag y byddwn yn chwilio am nac yn ysgrifennu mewn ffeil, y ffeil yn cadw golwg ar ble rydym yn. Felly mae'n rhyw fath o cyrchwr, y ffeil dangosydd sefyllfa. Ac felly pryd bynnag y byddwn yn ysgrifennu neu ddarllen eto i mewn i ffeil, y ffeil mewn gwirionedd yn cofio lle y mae, ac felly ei fod yn parhau o ble y cyrchwr. Gall hyn fod yn fuddiol pan fyddwch am, dyweder, darllen mewn swm penodol i wneud rhywbeth ac yna ei ddarllen yn y swm canlynol, ond weithiau efallai y byddwn eisiau mynd yn ôl neu mewn gwirionedd yn dechrau o werth cyfeirio penodol. Felly, yna bydd y swyddogaeth fseek, beth mae'n ei wneud yw caniatáu i ni symud y cyrchwr mewn ffeil penodol nifer penodol o bytes. Ac yna beth mae'n rhaid i ni ei wneud yw nodi lle mae gwerth cyfeirio yw. Felly, naill ai yn symud ymlaen neu yn ôl o ble y cyrchwr ar hyn o bryd, neu gallwn nodi y dylai dim ond yn symud i mewn o ddechrau y ffeil neu o ddiwedd y ffeil. Ac er mwyn i chi basio i mewn gwerthoedd negyddol neu gadarnhaol i swm, a bydd y math hwnnw o symud y cyrchwr naill ai ymlaen neu yn ôl. Cyn i ni fynd i mewn i'r psets eraill, unrhyw gwestiynau ar ffeil I / O? Iawn. Wrth i ni fynd i mewn mwy o enghreifftiau, mae croeso i roi'r gorau i mi ar gyfer cwestiynau. Felly, yn Whodunit, rydych yn rhoi ffeil bitmap tebyg i hwn coch ar y sleid, ac mae'n edrych fel hyn - criw o ddotiau coch - ac nad ydych yn wir yn gwybod beth sy'n ysgrifenedig. Os ydych yn llygad croes, efallai y byddwch yn gallu gweld lliw bluish bach y tu mewn i'r canol. Yn y bôn, dyna lle mae'r testun yn cael ei storio. Roedd llofruddiaeth a ddigwyddodd, ac mae angen i ni gael gwybod pwy oedd yn gyfrifol. Er mwyn gwneud hynny, mae angen i fath o newid y ddelwedd hon i mewn i fformat darllenadwy. Os ydych chi erioed wedi dod ar draws guys hyn, weithiau byddai pecynnau bach lle y byddai gennych chwyddwydr gyda ffilm coch. Dylai unrhyw un? Yeah. Felly, byddech yn rhywbeth llaw fel hyn, byddai gennych chwyddwydr gyda'r ffilm goch drosto, byddech yn ei roi dros y ddelwedd, a fyddech yn gallu gweld y neges gudd ynddo. Nid oes gennym chwyddwydr gyda ffilm coch, felly yn lle rydyn ni'n mynd i fath o greu ein hunain yn y pset. Ac felly mae'r defnyddiwr yn mynd i, whodunit mewnbwn yna y cliw,. Bmp, felly dyna y infile, dyna'r neges dot coch, ac yna maen nhw'n dweud verdict.bmp yn mynd i fod yn ein outfile. Felly, mae'n mynd i greu delwedd bitmap newydd tebyg i'r cliw 1 ac eithrio mewn fformat darllenadwy lle gallwn weld y neges gudd. Ers i ni yn mynd i fod yn delio â golygu a thrin bitmaps o ryw fath, rydym yn mynd i fath o blymio mewn i mewn i strwythur y ffeiliau hyn bitmap. Aethom dros y bit ychydig mewn darlith, ond gadewch i ni edrych i mewn iddynt rhai mwy. Bitmaps yn y bôn yn unig drefniant o bytes lle'r ydym wedi nodi pa bytes golygu beth. Felly dyma fath o fel map o'r ddelwedd bitmap gan ddweud ei fod yn dechrau gyda rhai ffeiliau pennawd, yn dechrau gyda rhywfaint o wybodaeth i mewn 'na. Byddwch yn gweld bod tua rhif 14 beit maint yn cael ei nodi o'r ddelwedd didfap, ac mae'n parhau ar. Ond yna beth rydym yn wir ddiddordeb mewn yma yn cychwyn o amgylch rhif y beit 54. Mae gennym y treblu'r RGB. Beth mae hynny'n mynd i wneud yw cynnwys y pixels gwirioneddol, y gwerthoedd lliw. Mae popeth yn uwch na yn y pennawd yn rhywfaint o wybodaeth sy'n cyfateb i faint y ddelwedd, lled y ddelwedd, a'r uchder. Pan fyddwn yn mynd i mewn i padin yn nes ymlaen, byddwn yn gweld pam fod maint y ddelwedd allai fod yn wahanol i'r lled neu uchder. Felly, wedyn i gynrychioli rhain - y delweddau didfap yn ddilyniannau o bytes - yr hyn y gallem ei wneud yw dweud iawn, dwi'n mynd i gofio bod yn fynegai 14, dyna lle mae'r maint yn, er enghraifft, ond yn hytrach yr hyn yr ydym ni'n mynd i'w wneud i wneud hyn yn haws yn cael ei chrisialu mewn strwythur. Ac felly mae gennym ddau structs a wnaed i ni, a BITMAPFILEHEADER a BITMAPINFOHEADER, ac felly pryd bynnag rydym yn darllen yn i'r ffeil, yn ddiofyn mae'n mynd i fod yn mynd yn eu trefn, ac felly er mwyn mae hefyd yn mynd i lenwi'r i mewn i newidynnau megis biWidth a biSize. Ac yna yn olaf, mae pob picsel yn cael ei chynrychioli gan dri bytes. Mae'r un cyntaf yw'r swm y glas yn y picsel, yr ail yw'r swm o wyrdd, ac yn olaf, y swm o goch, lle mae 0 yn ei hanfod nid oes wyrdd glas neu ddim neu ddim goch ac yna ff yw'r gwerth uchaf. Mae'r rhain yn werthoedd hecsadegol. Felly, yna os oes gennym ff0000, yna mae hynny'n cyfateb i uchafswm y glas ac yna dim gwyrdd a dim coch, felly, yna a fyddai'n rhoi i ni picsel glas. Yna, os oes gennym ff yn gyd ar draws y bwrdd, yna mae hynny'n golygu bod gennym picsel gwyn. Mae hyn yn fath o gyferbyn i fel arfer pan fyddwn yn dweud RGB. Mae'n wir yn mynd BGR. Felly, os ydym mewn gwirionedd yn edrych i mewn i enghraifft o ddelwedd bitmap - gadewch i mi dynnu un i fyny yma. Mae'n ychydig bach. Rwy'n chwyddo i mewn, a gallwn weld ei fod yn pixelated. Mae'n edrych fel blociau o liw. Mae gennych blociau gwyn ac yna blociau coch. Os ydych yn chwarae yn Microsoft Paint, er enghraifft, fe allech chi wneud rhywbeth fel 'na gan y bôn yn unig paentio sgwariau penodol mewn trefn benodol. Felly, yna beth mae hyn yn golygu yn y didfap fel a ganlyn. Yma, mae gennym picsel gwyn cyntaf, fod pob 6 yn f, ac yna mae gennym picsel coch, nodwyd gan 0000ff. Ac felly y dilyniant o bytes sydd gennym yn dangos sut mae'r ddelwedd bitmap yn mynd i edrych. Felly beth rwyf wedi ei wneud yma yn ysgrifenedig yn unig allan bawb bytes ac yna lliw yn y coch fel y gallwch fath o weld, os ydych yn llygad croes ychydig bach, sut y math hwnnw o yn dangos wyneb hapus. Mae'r ffordd y delweddau didfap gwaith yw fy mod rhagweld yn y bôn fel grid. Ac felly yn ddiofyn, pob rhes yn y grid wedi i fod yn lluosrif o 4 bytes. Os ydym yn edrych ar delwedd bitmap, rydych yn llenwi bob gwerth. Er enghraifft, efallai y bydd gennych coch yma, gwyrdd yma, yn las yma, ond rhaid i chi wneud yn siŵr bod y ddelwedd yn cael ei lenwi gyda lluosog o bedwar bytes. Felly os wyf eisiau i fy ddelwedd i fod yn dri bloc o led, yna byddai'n rhaid i mi roi gwerth gwag yn yr un olaf i'w gwneud yn lluosog o bedwar. Felly, yna byddwn yn ychwanegu rhywbeth yr ydym yn galw padin. Im 'jyst yn mynd i ddangos bod gyda x. Nawr rydym am ddweud delwedd sy'n yn 7 picsel hir, er enghraifft. Mae gennym 1, 2, 3, 4, 5, 6, 7, ac mae pob un sy'n cael ei llenwi â lliw. Mae'r ffordd y delweddau didfap yn gweithio yw bod angen inni gael 8fed. Ar hyn o bryd rydym wedi 1, 2, 3, 4, 5, 6, 7. Mae angen 8 lle ar gyfer y ddelwedd bitmap i ddarllen yn gywir. Felly, yna beth mae'n rhaid i ni ei wneud yw ychwanegu mewn dim ond ychydig o padin i wneud yn siŵr bod yr holl led yn unffurf a bod pob un o'r lled yn luosrif o 4. Ac felly yr wyf nodwyd yn flaenorol, padio fel x neu squiggly llinell, ond yn y delweddau didfap gwirioneddol y padin yn dangos o 0 hecsadegol. Felly, byddai hynny'n cymeriad unigol, 0. Beth allai ddod yn ddefnyddiol yn y gorchymyn xxd. Beth mae'n ei wneud yw mewn gwirionedd yn dangos i chi, hoffi debyg i'r hyn wnes i cyn y smiley pan fyddaf yn argraffu mewn gwirionedd beth fyddai pob lliw ar gyfer y pixel ac yna lliw-godio, pan fyddwch yn rhedeg xxd gyda gorchmynion canlynol, yna bydd yn mewn gwirionedd yn argraffu'r beth y lliwiau ar gyfer y rhai picsel. Beth sy'n rhaid i chi ei wneud yw dros yma yr wyf yn dangos, fel y s-54 yn dweud fy mod i'n mynd i ddechrau ar y 54eg beit oherwydd cyn hynny, cofiwch os ydym yn edrych yn ôl at y map o bitmaps, dyna yr holl wybodaeth pennawd a phethau fel 'na. Ond yr hyn yr ydym wir yn poeni am yr picsel gwirioneddol sy'n dangos y lliw. Felly, drwy ychwanegu yn y faner,-s 54, yna rydym yn gallu gweld y gwerthoedd lliw. A pheidiwch â phoeni am y baneri cymhleth a phethau fel 'na. Yn y set problem fanyleb, bydd gennych cyfarwyddiadau ar sut i ddefnyddio xxd i arddangos y picsel. Felly, os ydych yn gweld yma, mae'n fath o edrych fel bocs gwyrdd, y peth bach. Rwyf wedi lliw-godio y 00ff00 fel y bôn dweud na glas, mae llawer o wyrdd, a dim coch. Felly, sy'n cyfateb i wyrdd. Fel y gwelwch yma, rydym yn gweld petryal gwyrdd. Mae'r petryal gwyrdd yn dim ond 3 picsel o led, felly, yna yr hyn sydd gennym i'w wneud i wneud yn siŵr bod y ddelwedd yn lluosrif o 4 eang yn ychwanegu padin ychwanegol. Ac felly, yna dyna sut yr ydych yn gweld y rhain 0au yma. Bydd hyn mewn gwirionedd yn ganlyniad eich pset Newid maint, yn y bôn cymryd y didfap bach ac yna helaethu erbyn 4. Ac felly yr hyn a welwn yw bod mewn gwirionedd yn y ddelwedd hon yw 12 picsel o led, ond mae 12 yn lluosrif o 4, ac felly nid ydym mewn gwirionedd yn gweld unrhyw 0au ar y diwedd oherwydd nad oes angen i ni ychwanegu unrhyw oherwydd ei fod yn padio llawn. Nid oes ganddi le mwyach. Iawn. Unrhyw gwestiynau am padin? Iawn. Cool. Fel y soniais o'r blaen, mae'r bitmaps yn unig cyfres o bytes. Ac felly yr hyn sydd gennym yn hytrach na angen i gadw golwg ar yn union pa nifer o beit yn cyfateb i elfen benodol, yr ydym mewn gwirionedd wedi creu strwythur i gynrychioli'r hynny. Felly, yr hyn sydd gennym yw strwythur RGBTRIPLE. Pryd bynnag y byddwch yn cael achos o driphlyg RGB, oherwydd mae hyn yn fath diffinio strwythur, yna gallwch ei weld ar y newidyn rgbtBlue, yn yr un modd y newidynnau Gwyrdd a Choch, a fydd yn dangos faint o las, gwyrdd, a choch yn y drefn honno, mae gennych. Felly, os oes gennym y set amrywiol glas i 0, y set gwyrdd i ff, sef y gwerth uchafswm y gallwch ei gael, ac yna y newidyn coch osod i 0, yna byddai pa liw hyn yn arbennig RGB triphlyg gynrychioli? >> [Myfyrwyr] Green. Green. Yn union. Mae'n mynd i fod yn ddefnyddiol i wybod bod pryd bynnag y byddwch yn cael achos o driphlyg RGB, alli 'n weithredol gael mynediad at y swm y lliw - glas, gwyrdd, a choch - ar wahân. Nawr ein bod wedi trafod y strwythur hynny, gadewch i ni edrych ar y ffeil BMP. Mae'r rhain yn structs ar eich rhan. Yma mae gennym strwythur BITMAPFILEHEADER. O ddiddordeb yn y maint. Yn ddiweddarach, mae gennym y, header gwybodaeth sydd ychydig o bethau eraill sydd yn ddiddorol i ni, sef y maint, lled, a'i huchder. Fel byddwn yn mynd i mewn yn ddiweddarach, pan fyddwch yn darllen i mewn i'r ffeil, 'n awtomatig darllen yn oherwydd ein bod wedi gosod y gorchymyn i fod yr un fath. Felly, bydd y biSize yn cynnwys y bytes cywir sy'n cyfateb i faint gwirioneddol y ddelwedd. Ac yna dyma, yn olaf, fel yr ydym wedi siarad amdano, mae gennym y strwythur typedef RGBTRIPLE. Mae gennym rgbtBlue, Green, a Red gysylltiedig ag ef. Great. Iawn. Nawr ein bod yn deall bitmaps ychydig bach, yn deall bod gennym pennawd ffeil a pennawd gwybodaeth sy'n gysylltiedig ag ef ac yna ar ôl hynny, mae gennym y pethau diddorol y lliwiau, a'r rhai lliwiau yn cael eu cynrychioli gan structs RGBTRIPLE, a'r rheiny, yn eu tro, wedi tri gwerthoedd sy'n gysylltiedig at y glas, gwyrdd, a'r coch. Felly nawr, gallwn fath o feddwl am Adfer ychydig. Mae'n ddrwg gennym. Meddyliwch am Whodunit. Pan fyddwn wedi ein ffeil syniad, yna beth yr ydym am ei wneud yw darllen i mewn iddo picsel gan picsel ac wedyn rhywsut newid y picsel fel y gallwn allbwn i mewn i fformat darllenadwy. Ac felly i allbwn, rydym yn mynd i ysgrifennu picsel gan picsel i mewn i'r ffeil verdict.bmp. Dyna math o lawer i'w wneud. Rydym yn sylweddoli hynny. Felly, yr hyn rydym wedi ei wneud yw ein bod wedi darparu mewn gwirionedd i chi copy.c. Beth copy.c wneud yn unig yn gwneud copi union o ffeil bitmap a roddwyd ac wedyn allbynnau hynny. Felly, mae hyn eisoes yn agor y ffeil i chi, yn darllen yn picsel gan picsel, ac yna yn ysgrifennu mewn i mewn i ffeil allbwn. Gadewch i ni edrych ar hynny. Mae hyn yn sicrhau defnydd priodol, cael y filenames yma. Beth yw hyn yn ei fod yn gosod y ffeil mewnbwn i fod yr hyn rydym wedi cael llwyddiant mewn yn y infile yma, sydd yn ein hail gorchymyn-lein ddadl. Gwiriadau i wneud yn siŵr ein bod yn gallu agor y ffeil. Gwiriadau i wneud yn siŵr y gallwn ni wneud outfile newydd yma. Yna beth mae hyn yn ei wneud yma, 'i jyst yn y bôn yn dechrau darllen i mewn i'r ffeil didfap o'r dechrau. Y dechrau, fel y gwyddom, yn cynnwys y BITMAPFILEHEADER, ac felly bydd y dilyniannau o ddarnau uniongyrchol llenwch y BITMAPFILEHEADER. Felly beth sydd gennym yma yn dweud bod BF BITMAPFILEHEADER - sy'n ein amrywiol newydd o BITMAPFILEHEADER fath - rydym yn mynd i roi y tu mewn BF hyn yr ydym yn darllen o pwyntydd, sef ein infile. Faint rydyn ni'n darllen? Rydym yn darllen yn ôl faint o bytes mae angen i ni gynnwys y BITMAPFILEHEADER cyfan. Yn yr un modd, dyna beth rydym yn ei wneud ar gyfer y pennawd wybodaeth. Felly, rydym yn parhau hyd ein ffeil yn y infile, ac rydym yn darllen y darnau a bytes, ac rydym yn llenwi nhw'n uniongyrchol yn i mewn i'r achosion o'r newidynnau ein bod yn gwneud. Yma, rydym yn unig yn gwneud yn siwr bod y didfap yn Didfap. Nawr mae gennym outfile, dde? Felly, fel y mae pan fyddwn yn ei greu, ydyw yn y bôn yn wag. Felly, mae'n rhaid i ni yn y bôn yn creu didfap newydd o'r dechrau. Beth rydym yn ei wneud yw mae'n rhaid i ni wneud yn siŵr ein bod yn copïo yn y pennawd ffeil ac y pennawd gwybodaeth yn union fel y infile wedi. Beth rydym yn ei wneud yw byddwn yn ysgrifennu - a chofiwch fod BF yn y newidyn o BITMAPFILEHEADER fath, felly beth ydym yn ei wneud yw rydym yn unig yn defnyddio'r cynnwys i ysgrifennu i mewn i'r outfile. Yma, cofiwch buom yn siarad am padin, sut y mae'n bwysig gwneud yn siŵr fod y swm o picsel sydd gennym yn lluosrif o 4. Mae hwn yn fformiwla eithaf defnyddiol i gyfrifo faint o padin sydd gennych o ystyried y lled eich ffeil. Rwyf am i chi guys i gofio bod yn copy.c gennym fformiwla ar gyfer cyfrifo padin. Iawn? Felly mae pawb yn cofio hynny. Great. Felly, yna beth copy.c wneud nesaf yw ei ailadrodd dros yr holl scanlines. Mae'n mynd drwy'r rhesi yn gyntaf ac yna yn storio pob driphlyg ei fod yn darllen ac yna ysgrifennu i mewn i'r outfile. Felly, yna dyma ni yn darllen dim ond un RGB triphlyg ar y tro ac yna rhoi'r bod triphlyg un i mewn i'r outfile. Mae'r rhan anodd yw nad yw'r padin yn driphlyg RGB, ac felly ni allwn newydd ei ddarllen y swm hwnnw o padin treblu'r RGB. Beth mae'n rhaid i ni ei wneud mewn gwirionedd dim ond symud ein ffeil dangosydd sefyllfa, yn symud ein cyrchwr, i fath o sgip dros yr holl padin fel ein bod chi yn y rhes nesaf. Ac yna beth mae hyn yn ei wneud yw copi yn dangos i chi sut y gallech chi eisiau ychwanegu'r padin. Felly, rydym wedi cyfrifo faint o padin ei angen arnom, felly mae hynny'n golygu bod angen nifer o padding 0au. Beth yw hyn yn a ar gyfer dolen sy'n rhoi nifer o padin 0s i mewn i'n outfile. Ac yna yn olaf, byddwch yn cau'r ddwy ffeiliau. Byddwch yn cau'r infile yn ogystal â'r outfile. Felly dyna sut y copy.c yn gweithio, ac mae hynny'n mynd i fod yn eithaf defnyddiol. Yn hytrach na dim ond mewn gwirionedd yn uniongyrchol copïo a gludo yn neu dim ond yn edrych arno ac yn teipio i mewn beth bynnag yr ydych ei eisiau, efallai y byddwch jyst angen at chyflawna gorchymyn hwn yn y derfynell, cp copy.c whodunit.c, a fydd yn creu ffeil newydd, whodunit.c, sy'n cynnwys yr un cynnwys union fel copi yn ei wneud. Felly, yna beth y gallwn ei wneud yw defnyddio hynny fel fframwaith ar gyfer adeiladu a golygu ar gyfer ein ffeil whodunit. Mae'r rhain yn ein i-dos i'w wneud ar gyfer Whodunit, ond beth copy.c wneud mewn gwirionedd yn gofalu am y rhan fwyaf ohonynt i ni. Felly yr holl mae angen i ni ei wneud nesaf yw newid y picsel yn ôl yr angen i mewn gwirionedd yn gwneud y ffeil darllenadwy. Cofiwch fod am picsel a roddwyd triphlyg, felly ar gyfer newidyn penodol o RGBTRIPLE fath, gallwch weld y glas, gwerthoedd gwyrdd, a choch. Mae hynny'n mynd i ddod i mewn 'n hylaw oherwydd os gallwch gael gafael arnynt, sy'n golygu y gallwch hefyd eu gwirio, ac mae hynny'n golygu y gallwch hefyd eu newid. Felly pan fyddwn yn mynd yn ôl at ein henghraifft chwyddwydr coch, yn y bôn, yr oedd yn gweithredu fel rhyw fath o hidlo i ni. Felly, yr hyn rydym am ei wneud yw ein bod am i hidlo'r holl treblu'r sy'n dod i mewn Mae yna nifer o wahanol ffyrdd o wneud hyn. Yn y bôn, gallwch gael pa fath bynnag o hidlo ydych ei eisiau. Efallai eich bod am i newid yr holl picsel coch neu efallai eich bod am newid pixel lliw gwahanol i liw gwahanol. Mae hynny i fyny i chi. Cofiwch y gallwch wirio pa liw y picsel yn ac yna gallwch hefyd yn newid fel eich bod yn mynd drwyddo. Iawn. Felly dyna Whodunit. Unwaith y byddwch yn rhedeg Whodunit, byddwch yn gwybod pwy yw'r tramgwyddwr y drosedd oedd. Nawr rydym yn mynd i fynd i Newid maint. Rydym yn mynd i yn dal i fod yn delio â bitmaps. Beth ydym ni'n mynd i'w wneud yw ein bod yn mynd i gael mewnbwn didfap ac yna rydym yn mynd i basio mewn nifer, ac yna cael didfap outfile lle mae hynny'n bôn ein infile graddio gan n. Dweud fy ffeil yn ddim ond un picsel mawr. Yna, os bydd fy n oedd 3, scaling gan 3, yna byddwn yn ailadrodd y picsel n nifer o weithiau, felly 3 gwaith, ac yna hefyd ar raddfa i lawr 3 gwaith yn ogystal. Felly byddwch yn gweld rwy'n Gallwch ei fertigol yn ogystal ag yn llorweddol. Ac yna dyma enghraifft. Os oes gennych n = 2, byddwch yn gweld bod y pixel glas cyntaf yno dro ar ôl tro ddwy waith llorweddol hefyd fel ddwy waith fertigol. Ac yna mae hynny'n parhau ar, ac felly mae gennych cennu uniongyrchol o'ch ddelwedd wreiddiol gan ddau. Felly, yna pe baem yn manylu ar y pseudocode ar gyfer hyn, rydym am i agor y ffeil. Ac yna wybod os ydym yn mynd yn ôl yma, gallwn weld bod y lled ar gyfer y outfile yn mynd i fod yn wahanol na'r lled ar gyfer y infile. Beth mae hynny'n ei olygu? Mae hynny'n golygu bod ein gwybodaeth pennawd yn mynd i newid. Ac felly yr hyn fydd yr ydym am ei wneud yw diweddaru'r wybodaeth pennawd, gwybod pan fyddwn yn darllen yn y ffeiliau os ydych yn gweithredu ar y fframwaith copy.c, gennym eisoes newidyn sy'n dangos beth yw'r maint yn a phethau fel 'na. Felly, unwaith y byddwch wedi hynny, beth efallai y byddwch am ei wneud yw newid y newidynnau penodol. Cofiwch, os oes gennych strwythur, sut i gael gafael ar yr amrywiadau ym hynny. Byddwch yn defnyddio gweithredwr y dot, dde? Felly, yna gan ddefnyddio hynny, byddwch yn gwybod y byddi angen i chi newid y wybodaeth header. Felly dyma dim ond rhestr o'r elfennau gwirioneddol sy'n mynd i gael ei newid yn eich ffeil. Mae'r maint y ffeil yn mynd i gael ei newid, y llun, yn ogystal â lled a'r uchder. Felly, yna mynd yn ôl at y map o bitmaps, edrych i weld a yw'n pennawd ffeil neu y pennawd wybodaeth sy'n cynnwys y wybodaeth ac yna newid yn ôl yr angen. Unwaith eto, yn dweud cp copy.c resize.c. Mae hynny'n golygu bod resize.c bellach yn cynnwys popeth sydd ei gynnwys y tu mewn copi oherwydd bod copi yn rhoi i ni ffordd o ddarllen i mewn i bob picsel scanline gan picsel. Ac eithrio yn awr, yn hytrach na dim ond newid y gwerthoedd fel y gwnaethom yn Whodunit, hyn yr ydym am ei wneud yw ein bod eisiau ysgrifennu mewn picseli lluosog ar yr amod ein n yn fwy nag 1. Yna, yr hyn rydym am ei wneud yw ein bod am ymestyn ei llorweddol drwy n, yn ogystal ag ymestyn ei fertigol gan n. Sut y gallem wneud hyn? Dweud eich n yw 2 ac mae gennych y infile a roddir. Mae eich cyrchwr yn mynd i ddechrau ar yr un cyntaf, a beth rydych am ei wneud os n yw 2, rydych eisiau argraffu mewn 2 o'r rheiny. Felly, byddwch yn argraffu mewn 2 o'r rheiny. Yna eich cyrchwr yn mynd i symud i'r picsel nesaf, sef yr un goch, ac mae'n mynd i argraffu 2 o'r rheiny a rhai coch, atodi ef ar yr hyn y mae'n ei wneud o'r blaen. Yna bydd y cyrchwr yn symud i'r picsel nesaf a thynnu mewn 2 o'r rheiny. Os edrychwch yn ôl i fframwaith y copy.c, beth mae hyn yn ei wneud iawn yma mae'n creu achos newydd o driphlyg RGB, newidyn newydd o'r enw triphlyg. A dyma pan fydd yn darllen i mewn iddo, mae'n darllen o 1 infile RGBTRIPLE ac yn ei storio tu mewn y newidyn triphlyg. Felly, yna gennych mewn gwirionedd yn newidyn sy'n cynrychioli'r picsel penodol. Yna, pan fyddwch yn ysgrifennu, beth efallai y byddwch am ei wneud yw encase y datganiad fwrite i mewn i am ddolen sy'n ysgrifennu i mewn i'ch outfile gymaint o weithiau ag sydd ei angen. Mae hynny'n ddigon syml. Dim ond yn y bôn ailadrodd y broses ysgrifennu n nifer o weithiau er mwyn ei llorweddol. Ond yna mae'n rhaid i ni gofio bod ein padin yn mynd i newid. Yn flaenorol, yn dweud gennym rywbeth o hyd 3. Yna byddem yn unig yn ychwanegu o ran faint y padin? Dim ond un mwy i'w gwneud yn luosrif o 4. Ond yn dweud ein bod yn cennu y delwedd arbennig gan n = 2. Felly, yna byddai faint o picsel glas gennym ar y diwedd? Byddai gennym 6. 1, 2, 3, 4, 5, 6. Mae pob hawl. 6 Nid yw lluosrif o 4. Beth yw'r lluosrif agosaf o 4? Mae hynny'n mynd i fod yn 8. Felly, rydym yn wir yn mynd i gael 2 gymeriadau o padding yno. A oes unrhyw un yn cofio os oes gennym fformiwla i gyfrifo padin a lle y gallai hynny fod? [Ymateb y myfyrwyr Anghlywadwy] >> Yeah, copy.c. Hawl. Mae fformiwla ym copy.c i gyfrifo faint o padin sydd gennych cael lled penodol o'r ddelwedd didfap. Felly, yna mae hynny'n mynd i fod yn ddefnyddiol pan fydd angen i chi ychwanegu rhywfaint o padin i mewn gwirionedd yn ffigwr allan faint o padin angen i chi ei ychwanegu. Ond un nodyn, fodd bynnag, yw eich bod am wneud yn siŵr eich bod chi'n defnyddio'r maint cywir. Dim ond byddwch yn ofalus oherwydd eich bod yn y bôn yn mynd i fod yn delio gyda dau delweddau didfap. Byddwch am wneud yn siŵr eich bod yn defnyddio yr un cywir. Pan fyddwch chi'n cyfrifo y padin ar gyfer y outfile, rydych am ei ddefnyddio lled y outfile ac nid lled yr un blaenorol. Great. Y math hwnnw o yn gofalu am ymestyn delwedd bitmap cyfan yn llorweddol. Ond yr hyn rydym am ei wneud yw mewn gwirionedd yn ymestyn ei fertigol yn ogystal. Mae hyn yn mynd i fod ychydig yn fwy anodd oherwydd pan ydym wedi gorffen copïo rhes ac ysgrifennu y rhes, mae ein cyrchwr yn mynd i fod ar y diwedd. Felly, os ydym yn darllen eto, yna mae'n dim ond yn mynd i ddarllen i mewn i'r llinell nesaf. Felly, yr hyn rydym am ei wneud yn fath o ddod o hyd i ffordd o gopïo rhai rhesi eto neu dim ond math o gymryd y rhes ac yna ailysgrifennu eto. Fel yr wyf yn fath o gyfeirio at, mae yna sawl ffordd wahanol o wneud hyn. Beth allech chi ei wneud yw wrth i chi fynd trwy a darllen drwy'r scanline penodol ac yn ei newid yn ôl yr angen, yna fath o siop pawb picsel mewn arae. Yna, yn ddiweddarach eich bod yn gwybod y bydd angen i chi argraffu y casgliad unwaith eto, ac felly gallwch ddefnyddio'r amrywiaeth i wneud hynny. Ffordd arall o wneud hyn yw y gallech chi i lawr un rhes, deall bod angen i chi gopïo hynny eto, felly mewn gwirionedd yn symud eich cyrchwr, ac mae hynny'n mynd i fod yn defnyddio'r dull fseek. Gallech symud eich cyrchwr yr holl ffordd yn ôl ac yna ailadrodd y broses copi eto. Felly, os yw ein rhif graddio yn n, yna byddai faint o weithiau y mae'n rhaid i ni fynd yn ôl ac ailysgrifennu llinell? >> [Myfyrwyr] n - 1. >> Yeah, perffaith. n - 1. Rydym wedi gwneud hyn unwaith yn barod, felly, yna byddwn yn awyddus i ailadrodd y broses troi'n ôl n - 1 swm o weithiau. Iawn. Felly, mae gennych eich swyddogaeth newid maint. Nawr gallwn gael i ran llawer o hwyl, fy hoff pset, sy'n Adfer. Yn hytrach na bitmaps, y tro hwn rydym yn delio â JPEG. Nid ydym yn rhoi gwirionedd ffeil yn unig o JPEG, rydym yn y bôn yn rhoi fformat cerdyn cof amrwd. Ac felly mae hyn yn cynnwys ychydig o werthoedd gwybodaeth a garbage yn y dechrau, ac yna bydd yn dechrau ac mae ganddo criw o ffeiliau JPEG. Fodd bynnag, rydym yn rhoi cerdyn lle'r ydym wedi dileu y lluniau; yn y bôn, rydym wedi anghofio lle mae'r lluniau yn cael eu lleoli o fewn y cerdyn. Felly, ein gwaith wedyn yn Adfer yw i fynd drwy'r fformat cerdyn a dod o hyd i'r lluniau eto. Yn ffodus, mae strwythur o ffeiliau JPEG a'r ffeil cerdyn yn ychydig yn ddefnyddiol. Mae'n gallai amheuaeth, wedi bod ychydig yn fwy anodd os nad oedd yn y fformat penodol. Mae pob ffeil JPEG mewn gwirionedd yn dechrau gyda dau dilyniannau posibl, a restrir uchod. Yn y bôn, pryd bynnag y byddwch gennych ffeil JPEG newydd, yn dechrau gyda naill ai y dilyniant ffd8 ffe0 neu un arall, ffd8 ffe1. Peth arall ddefnyddiol i wybod yw bod JPEG yn cael eu storio contiguously. Felly, pryd bynnag 1 ffeil JPEG dod i ben, mae'r un arall yn dechrau. Felly, nid oes unrhyw fath o mewn-rhwng gwerthoedd yno. Unwaith i chi gyrraedd y dechrau JPEG, os ydych chi eisoes wedi bod yn darllen a JPEG, eich bod yn gwybod eich bod wedi taro ar ddiwedd yr un blaenorol a dechrau'r un nesaf. I fath o ddelweddu hyn, fe wnes i sgematig. Peth arall am JPEG yw y gallwn eu darllen mewn dilyniannau o 512 bytes ar y tro, yn yr un modd â dechrau'r y cerdyn. Nid oes angen i ni gael eu gwirio bob beit unigol gan y byddai hynny'n sugno. Felly, yn hytrach, yr hyn y gallwn ei wneud yw mewn gwirionedd newydd ei ddarllen mewn 512 bytes ar y tro ac yna, yn hytrach na gwirio yn rhwng y rhai yn y sleisys ychydig bach, gallwn ni edrychwch ar y dechrau y 512 bytes. Yn y bôn, yn y llun, yr hyn a welwch yn y dechrau y cerdyn, gennych werthoedd nad ydynt yn wir yn berthnasol i'r JPEG gwirioneddol eu hunain. Ond yna yr hyn sydd gennyf yn seren i ddynodi un o'r ddau dilyniannau cychwyn ar gyfer JPEG. Felly, pryd bynnag y byddwch yn gweld seren, byddwch yn gwybod bod gennych ffeil JPEG. Ac yna bob ffeil JPEG yn mynd i fod yn rhai lluosog o 512 bytes ond nid o reidrwydd yr un lluosog. Mae'r modd yr ydych yn gwybod eich bod wedi taro arall JPEG yw os byddwch yn taro arall seren, arall dilyniant cychwyn bytes. Yna, yr hyn yr ydych wedi yma yw, mae gennych y ffeil JPEG coch yn parhau hyd nes y byddwch yn taro seren, sy'n cael ei nodi gan lliw newydd. Byddwch yn parhau ac yna byddwch yn taro arall seren, byddwch yn taro arall JPEG, byddwch yn parhau yr holl ffordd hyd at y diwedd. Rydych chi ar y llun olaf yma, yr un pinc. Rydych yn mynd i ben tan i chi gyrraedd y diwedd cymeriad ffeil. Mae hyn yn mynd i fod yn wirioneddol ddefnyddiol. Mae siopau cludfwyd ychydig o brif yma: Nid yw'r ffeil cerdyn yn dechrau gyda JPEG, ond unwaith y JPEG dechrau, yr holl JPEG yn cael eu cadw ochr yn ochr â'i gilydd. Mae rhai pseudocode ar gyfer y Adfer. Yn gyntaf, rydym yn mynd i agor ein ffeil cerdyn, ac mae hynny'n mynd i fod yn defnyddio ein ffeil I / O swyddogaethau. Rydym yn mynd i ailadrodd y broses ganlynol hyd nes y byddwn wedi cyrraedd diwedd y ffeil. Rydym yn mynd i ddarllen 512 bytes ar y tro. A hyn a ddywedais yma yw ein bod yn mynd i storio mewn byffer, felly yn y bôn ddal gafael ar y rhai 512 bytes nes ein bod yn gwybod yn union beth i'w wneud â nhw. Yna, yr hyn rydym am ei wneud yw ein bod am weld a ydym wedi taro seren neu beidio. Os ydym wedi taro yn seren, os ydym wedi taro un o'r dilyniannau cychwyn, yna rydym yn gwybod ein bod wedi taro ffeil JPEG newydd. Beth bydew 'am ei wneud yw ein bod yn mynd i eisiau i greu ffeil newydd yn ein cyfeiriadur pset4 i barhau i wneud y ffeil. Ond hefyd, os ydym wedi gwneud eisoes JPEG o'r blaen, yna rydym eisiau rhoi terfyn ar y ffeil ac yn gwthio i'r ffolder pset4, lle bydd gennym y ffeil ei storio oherwydd os nad ydym yn nodi ein bod ni wedi dod i ben y ffeil JPEG, yna byddwn yn y bôn yn cael swm amhenodol. Ni fydd y JPEG dod i ben. Felly, rydym am wneud yn siŵr bod pan fyddwn yn darllen i mewn i ffeil JPEG ac ysgrifennu hynny, ydym am gau'r benodol er mwyn agor yr un nesaf. Byddwn am wirio nifer o bethau. Rydym yn awyddus i weld a ydym ni'n ar ddechrau a JPEG newydd gyda'n byffer a hefyd os ydym eisoes wedi dod o hyd JPEG cyn oherwydd bydd hynny'n newid eich proses ychydig. Felly, yna ar ôl i chi fynd trwy'r holl ffordd ac rydych yn taro ar ddiwedd y ffeil, yna beth youll 'angen at gwna ydy youll' angen at gau'r holl ffeiliau sydd ar hyn o bryd ar agor. Dyna fydd y ffeil JPEG olaf sydd gennych, yn ogystal â'r ffeil cerdyn eich bod wedi bod yn delio â. Y rhwystr olaf y mae angen i ni fynd i'r afael yw sut i mewn gwirionedd yn gwneud ffeil JPEG a sut i wthio mewn gwirionedd i'r ffolder. Mae'r pset ei gwneud yn ofynnol bod pob JPEG eich bod yn dod o hyd i fod yn y fformat canlynol, lle mae gennych y rhif. jpg. Mae nifer, hyd yn oed os yw'n 0, rydym yn galw ei 000.jpg. Pryd bynnag y byddwch ddod o hyd i JPEG yn eich rhaglen, ydych yn mynd i eisiau ei enwi yn y drefn y mae'n dod o hyd. Beth yw ystyr hyn? Mae angen i fath o gadw golwg ar faint o ydym wedi dod o hyd a'r hyn y dylai'r nifer o bob JPEG fod. Yma rydym yn mynd i fanteisio ar y swyddogaeth sprintf. Yn debyg i printf, a dim ond math o brintiau gwerth allan i'r derfynfa, sprintf argraffu'r ffeiliau y tu allan i mewn i'r ffolder. Ac felly beth fyddai hyn yn ei wneud pe bai gen i sprintf, teitl, ac yna y llinyn yno, byddai'n argraffu 2.jpg. Gan dybio fy mod i wedi cau fy ffeiliau yn gywir, a fyddai'n cynnwys y ffeil fy mod wedi bod yn ysgrifennu allan. Ond un peth yw bod y cod sydd gennyf yma nid yw'n hollol bodloni'r hyn y mae'r pset ei gwneud yn ofynnol. Mae'r pset ei gwneud yn ofynnol bod y ffeil JPEG ail enwi 002 yn hytrach na dim ond 2. Felly, pan fyddwch yn argraffu'r enw, yna efallai efallai y byddwch am newid y placeholder ychydig. Oes unrhyw un yn cofio sut y gallwn ganiatáu ar gyfer mannau ychwanegol pan fyddwn argraffu rhywbeth? Yeah. >> [Myfyrwyr] Rydych yn rhoi 3 rhwng yr arwydd y cant a 2. >> Yeah, perffaith. Byddwch yn rhoi 3 yn yr achos hwn oherwydd ein bod eisiau lle i 3. Byddai 3d% yn ôl pob tebyg yn rhoi i chi 002.jpg yn hytrach na 2. Mae'r ddadl gyntaf i'r swyddogaeth sprintf mewn gwirionedd amrywiaeth torgoch, yr ydym eisoes yn gwybod fel llinynnau. Mae'r rhai ewyllys, math o fwy fel storio dros dro, dim ond storio y llinyn canlyniadol. Ni fyddwch mewn gwirionedd yn delio â hyn, ond mae angen i chi ei gynnwys. Mae gwybod bod pob enw ffeil y rhif, sydd yn cymryd i fyny tri chymeriad, ac yna. jpg, dylai pa mor hir y casgliad fod? Taflwch allan yn rhif. Faint o gymeriadau yn y teitl, yn yr enw? Felly mae 3 hashtags, cyfnod, jpg. >> [Myfyrwyr] 7. >> 7. Ddim yn hollol. Rydym yn mynd i eisiau 8 oherwydd rydym am i ganiatáu ar gyfer y terminator null yn ogystal. Yn olaf, dim ond i dynnu allan y broses y byddwch chi'n ei wneud am Adfer, gennych rywfaint o wybodaeth dechrau. Byddwch yn parhau nes i chi ddod o hyd i'r dechrau o ffeil JPEG, a gall hynny fod naill ai un o ddau dilyniannau cychwyn. Rydych yn cadw ar ddarllen. Mae pob slaes yma yn cynrychioli 512 bytes. Rydych yn cadw ar ddarllen, parhewch i ddarllen hyd nes y byddwch yn dod ar draws un arall dilyniant cychwyn. Unwaith y byddwch wedi bod, fyddwch chi'n gorffen y JPEG ar hyn o bryd - yn yr achos hwn, mae'n un goch, felly yr ydych am ben hynny. Rydych am sprintf enw'r hynny yn eich ffolder pset4, yna rydych am agor JPEG newydd ac yna parhewch i ddarllen hyd nes y byddwch yn dod ar draws y nesaf. Cadwch ar darllen, cadw ar ddarllen, ac yna yn olaf, yn y pen draw, rydych chi'n mynd i gyrraedd diwedd y ffeil, ac felly youll 'angen at gau'r JPEG diwethaf eich bod yn gweithio gyda, sprintf hynny yn eich ffolder pset4, ac yna edrych ar yr holl luniau yr ydych wedi gotten. Mae'r rhai lluniau mewn gwirionedd yn lluniau o CS50 staff, ac felly dyma lle mae'r bonws yn rhan o'r hwyl pset yn dod i mewn yw eich bod yn cystadlu yn eich adrannau i ddod o hyd i'r TFS yn y lluniau ac yn cymryd lluniau gyda hwy i brofi eich bod wedi gwneud y pset ac fel y gallwch weld pa aelodau staff yn y lluniau. Felly, yna i chi gymryd lluniau gyda'r staff. Weithiau, bydd rhaid i chi fynd ar i lawr. Mae'n debyg y bydd rhai ohonynt yn ceisio rhedeg i ffwrdd oddi wrthych. Byddwch yn cymryd lluniau gyda nhw. Mae hyn yn parhau. Dyw hi ddim yn ddyledus pan fydd y pset yn ddyledus. Bydd y dyddiad cau yn cael eu cyhoeddi yn y fanyleb. Yna, ynghyd â'ch adran, pa un bynnag adran yn cymryd y lluniau mwyaf Bydd gyda'r aelodau staff mwyaf yn ennill gwobr 'n bert awesome. Dyna fath o gymhelliad i gael eich pset4 orffen cyn gynted ag y bo modd oherwydd wedyn gallwch chi fynd i lawr i fusnes hela i lawr yr holl aelodau staff gwahanol CS50. Nid yw hynny'n orfodol, fodd bynnag, felly ar ôl i chi gael y lluniau, yna rydych wedi eu gorffen gyda pset4. A dwi'n gorffen gyda Walkthrough 4, felly diolch i chi gyd am ddod. Pob lwc gyda'r Fforensig. [Cymeradwyaeth] [CS50.TV]