[MUSIC CHƠI] DAVID J. Malan: Được rồi. Đây là CS50, và điều này là kết thúc của Tuần Bốn. Và một trong những chủ đề hôm nay là pháp y kỹ thuật số, nghệ thuật phục hồi thông tin. Và thực sự, mặc dù bạn đang ở giữa ngay bây giờ hòa bình tại Ba và Breakout, vào tuần tới, sẽ tập trung vào chính xác lĩnh vực này. Vì vậy, một trong những công việc thú vị nhất mà tôi từng đã có được trở lại trường học sau đại học, khi tôi đang làm việc cho các địa phương Middlesex Biện Lý Quận văn phòng, làm pháp y làm việc. Vì vậy, về cơ bản, Massachusetts Cảnh sát Nhà nước, nhân dịp, khi làm việc trên trường hợp sẽ mang lại những thứ như ổ đĩa cứng và đĩa mềm và thẻ nhớ và các loại tương tự. Và họ sẽ giao cho tôi và người thầy của tôi, và mục tiêu của chúng tôi là tìm ra bằng chứng, nếu có bất kỳ, trên các phương tiện truyền thông. Bây giờ cái nhìn thoáng qua, bạn có thể đã thấy trên thế giới này pháp y trong phương tiện truyền thông, truyền hình và phim ảnh. Nhưng công việc tôi đã có, và dám khẳng định rằng thế giới đó, không phải là khá như bạn sẽ nhìn thấy nó. Chúng ta hãy nhìn vào những gì bạn đã có thể nhìn thấy. [VIDEO xem lại] -Ok. Bây giờ, chúng ta có được một cái nhìn tốt ở bạn. [MUSIC CHƠI] -Hold Nó. Chạy trở lại đó. -Chờ Một phút. Đi sang phải. -Có. Đóng băng đó. -Toàn Màn hình. -Ok. Đóng băng đó. -Tighten Lên trên đó, được không? -Vector Chân vào chàng trai của bánh xe lại. -Zoom Trong ngay tại chỗ này. -Với Quyền thiết bị, các hình ảnh có thể được mở rộng và sắc nét. Cái gì vậy? -Nó Là một chương trình nâng cao. -Cần Bạn rõ ràng là bất kỳ? Tôi không biết. Chúng ta hãy nâng cao nó. -Enhance Mục A6. Tôi tăng cường các chi tiết, và- -I Nghĩ rằng có đủ để tăng cường. Phát hành nó để màn hình của tôi. -I Tăng cường sự phản chiếu trong mắt cô ấy. -Let Đang chạy qua tăng cường video. -Edgar, Bạn có thể nâng cao này? -Hang Trên. -Tôi Được làm việc trên phản ánh này. Phản ánh -Có của một ai đó. -Reflection. -Có Là một sự phản ánh của khuôn mặt của người đàn ông. Phản ánh -Các! -Có Là một sự phản ánh. -Zoom Ở trên gương. Bạn có thể thấy một sự phản ánh. Bạn -Có nâng cao hình ảnh từ đây? Bạn -Có nâng cao nó? Bạn -Có nâng cao nó? Chúng tôi -Có tăng cường này? Bạn -Có nâng cao nó? -Hold Trên một giây. Tôi sẽ tăng cường. -Zoom Ở trên cửa. -Times 10. -Zoom. -Move Trong. , Gấp. -Chờ, Dừng lại. -Stop. -Pause Nó. -Rotate Chúng tôi 75 độ xung quanh theo chiều dọc, xin vui lòng. -Stop. Quay trở lại phần về cánh cửa một lần nữa. -Got Một tăng cường hình ảnh có thể bitmap? -Có Chúng ta có thể sử dụng Pradeep Singh phương pháp để xem vào cửa sổ. -Các Phần mềm là nhà nước của nghệ thuật. -Các Eigenvalue tắt. -Với Quyền sự kết hợp của algorithms-- Cậu ấy lấy ánh sáng của các thuật toán để cấp độ tiếp theo, và tôi có thể sử dụng chúng để tăng cường bức ảnh này. -Lock Về và mở rộng các trục z. -Enhance. Tăng cường. -Enhance. -Freeze Và nâng cao. [END IMG xem lại] DAVID J. Malan: Vì vậy, những người đang có tất cả các từ, nhưng họ không được sử dụng trong câu một cách chính xác. Và thực sự trong tương lai, bất cứ lúc nào, xin vui lòng, bạn nghe ai đó nói một lời, "Tăng cường", tiếng cười khúc khích một chút. Bởi vì khi bạn cố gắng để nâng cao, Ví dụ, đây là những gì sẽ xảy ra. Vì vậy, đây là một bức ảnh tuyệt đẹp. Đây là Daven riêng của CS50. Và giả sử rằng chúng ta muốn tập trung vào các nháy mắt, hoặc phản ánh của kẻ xấu đó là rõ ràng chụp bởi camera an ninh. Đây là những gì sẽ xảy ra khi bạn phóng to một hình ảnh chỉ có một số hữu hạn bit liên kết với nó. Đó là những gì bạn sẽ nhận được. Và quả thực, trong mắt của Daven là nhưng bốn, có lẽ sáu pixel mà soạn chính xác những gì đã le lói ở đó. Vì vậy, vấn đề Set Bốn cuối cùng sẽ có bạn khám phá thế giới này, đặc biệt bởi bản chất của một cái gì đó chúng ta gọi là tập tin I / O, nơi I / O chỉ là một cách ưa thích của nói đầu vào và đầu ra. Vì vậy, cho đến nay, tất cả các tương tác chúng tôi đã có với một máy tính đã được phần lớn với bạn bàn phím và màn hình, nhưng không quá nhiều với các ổ đĩa cứng, hoặc lưu các tập tin vượt ra ngoài những người bạn mình viết. Chương trình của bạn vậy, đến nay có không được tạo ra, và tiết kiệm, và cập nhật các tập tin riêng của họ. Vâng, một tập tin là gì? Vâng, một cái gì đó giống như một JPEG. Đây là một hình ảnh có lẽ bạn có hoặc tải lên Facebook, hoặc nhìn thấy bất cứ nơi nào trên web. Thật vậy, hình ảnh chúng tôi chỉ cưa của Daven là một JPEG. Và điều thú vị về các tập tin như hình ảnh JPEG là họ có thể được xác định, thường, bởi mô hình nhất định các bit. Nói cách khác, nó là gì mà phân biệt một JPEG từ GIF từ một PING từ Word tài liệu từ một file Excel? Vâng, nó chỉ khác nhau mô hình của các bit. Và những mô hình khác nhau thường vào lúc bắt đầu của những tập tin. Vì vậy, khi máy tính của bạn mở Word doc, hoặc khi một máy tính sẽ mở ra một JPEG, có vẻ thường tại lần đầu tiên một số bit trong tập tin. Và khi nhận ra những mô hình, nó nói, oh, đây là một hình ảnh. Hãy để tôi hiển thị nó cho người sử dụng như một hình ảnh. Hoặc, oh, điều này trông giống như một doc Word. Hãy để tôi chỉ cho người sử dụng như một bài luận. Vì vậy, ví dụ, hình ảnh JPEG, nó quay ra, là khá tinh vi bên dưới mui xe. Nhưng ba byte đầu tiên trong hầu hết tất cả các JPEG bắt đầu với ba con số. Vì vậy, byte không, một, và hai là, trong hầu hết tất cả các định dạng JPEG, 255, sau đó là số 216, sau đó là số 255. Và những gì bạn sẽ có thể bắt đầu thực hiện vào tuần tới thực sự là chọc bên dưới mui xe của các tập tin như hình ảnh JPEG và như các tập tin bitmap, và nhìn thấy những gì luôn luôn ở đó càng lâu như bạn đã sử dụng máy tính. Nhưng những gì không có thường viết như số thập phân như thế này. Khoa học máy tính không có xu hướng nói trong thập phân. Họ không thực sự nói chuyện trong hệ nhị phân. Thông thường, khi chúng ta muốn thể hiện số, chúng tôi thực sự sử dụng hệ thập lục phân, mà bạn có thể nhớ lại từ, nói rằng, vấn đề Set Một, trong đó thách thức bạn phải suy nghĩ về một hệ thống khác nhau. Chúng tôi, tất nhiên, đã quen thuộc với số thập phân, không thông qua chín. Chúng tôi nói về nhị phân. Và chúng tôi không thực sự có để sử dụng nhiều ở đây vào ra, bởi vì máy tính sẽ sử dụng. Tuy nhiên, các lập trình viên sẽ rất thường xuyên, nhưng không phải lúc nào, sử dụng hệ thập lục phân, mà chỉ có nghĩa bạn có 16 chữ cái trong bảng chữ cái của bạn, như trái ngược với hai hoặc 10. Vì vậy, làm thế nào để bạn đếm đến cao hơn chín trong hệ thập lục phân? Bạn đi 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, đ, e, chỉ cần theo quy ước. Nhưng điều quan trọng là mỗi trong số này là một biểu tượng duy nhất. Không có 10. Không có 11, cho mỗi gia nhập, bởi vì mỗi các chữ số của bạn, giống như trong hệ thập phân và cũng giống như trong hệ nhị phân, nên chỉ là một nhân vật duy nhất, theo quy ước. Vì vậy, mà sau đó là bảng chữ cái chúng ta có lúc xử lý của chúng tôi cho hệ thập lục phân. Vì vậy, những gì hiện một JPEG trông giống như nếu bạn là để viết ra những người đầu tiên ba không byte là số thập phân nhưng, Ví dụ, như hệ thập lục phân? Và tại sao hex thậm chí tất cả những gì hữu ích? Vâng, một cái nhìn nhanh một ví dụ. Vì vậy, nếu tôi viết ra các bit đại diện cho các số thập phân numbers-- này có thể là một chút gỉ bây giờ từ một vài tuần trở lại, nhưng một trong những trái và một trong những quyền là khá dễ dàng. 255 là số lượng lớn nhất của chúng tôi có thể đại diện với tám bit. Đó là tất cả những người thân. Vì vậy, chỉ có một mà là nhẹ thú vị là một trong những trung. Và nếu bạn loại làm ra toán học, bạn sẽ suy luận rằng, trên thực tế, rằng mô hình của một và số không đại diện cho 216. Vì vậy, chúng ta hãy chỉ định cho bây giờ mà những là chính xác. Nhưng tại sao điều này là thú vị? Vâng, một byte, tất nhiên, là tám bit. Và nó chỉ ra rằng nếu bạn nghĩ của một byte như hai khối của bốn bit, như thế này. Hãy để tôi chỉ cần thêm một số không gian. Vì vậy, trước, sau. Tôi đã chỉ cần thêm một số không gian màu trắng vì lợi ích trực quan ở đây. Làm thế nào có thể bây giờ chúng tôi đại diện cho trong, nói, thập lục phân mỗi quad bit, mỗi bộ bốn bit? Vì vậy, ví dụ, bên trái bây giờ, chúng tôi có 1111 trong hệ nhị phân. Con số trong hệ thập phân là gì, nếu bạn làm ra toán học? Bạn có nơi những người thân, nơi twos, nơi bốn chân, và nơi Tám. TƯỢNG: 15. DAVID J. Malan: Đó là 15. Vì vậy, nếu chúng ta làm tám cộng với bốn cộng với hai cộng một, chúng tôi nhận được 15. Vì vậy, tôi có thể viết ra 15 dưới đây 1111, nhưng toàn bộ các điểm ở đây là hệ thập lục phân, không phải thập phân. Vì vậy, thay vì viết xuống 15, 1-5, Tôi sẽ viết rằng trong hex, mà nếu bạn nghĩ lại, nếu bạn có không thông qua f, những gì được 15 sẽ là? TƯỢNG: f. DAVID J. Malan: Thực ra đó là e. Và bạn có thể làm việc mà ra bằng cách nói, tốt, nếu một là 10, sau đó OK, e là 15. Vì vậy, trên thực tế, chúng ta có thể viết lại cùng một tập hợp các con số như f f. Và sau đó, nếu chúng ta làm một chút về toán học, chúng tôi sẽ suy luận rằng đó là d. Tám là khá dễ dàng, bởi vì chúng tôi có một trong những nơi Tám. Và sau đó, chúng tôi có một vài chi tiết f f. Vì vậy, những gì con người có xu hướng làm theo quy ước khi họ sử dụng hệ thập lục phân là họ chỉ viết này một chút ngắn gọn hơn, thoát khỏi hầu hết các không gian màu trắng. Và chỉ để được siêu rõ ràng để độc giả rằng đây là hệ thập lục phân, quy ước đơn giản trong con người là bạn viết không x, trong đó không có ý nghĩa khác hơn một định hình ảnh của, ở đây có một số hex. Và sau đó, bạn đặt hai chữ số, f f trong trường hợp này, sau đó d một, sau đó f f. Vì vậy, câu chuyện dài ngắn, hệ thập lục phân chỉ có xu hướng là hữu ích bởi vì mỗi mình chữ số, không thông qua f, hoàn toàn dòng với một mô hình của bốn bit. Vì vậy, nếu bạn có hai chữ số thập lục phân, không thông qua F, một lần nữa và một lần nữa, cung cấp cho bạn một cách hoàn hảo tám bit hoặc một byte. Vì vậy, đó là lý do tại sao nó có xu hướng thông thường là hữu ích. Không có trí tuệ nội dung thực sự vượt ra ngoài đó, khác với tính thực tế của nó. Bây giờ hình ảnh JPEG không phải là duy nhất tập tin định dạng đồ họa. Bạn có thể nhớ lại rằng có các tập tin như thế này trên thế giới, ít nhất là từ một vài năm trở lại. Vì vậy, đây là thực sự cài đặt trong Windows XP trên hàng triệu máy tính trên toàn thế giới. Và đây là một tập tin bitmap, BMP. Và một tập tin bitmap, như bạn sẽ thấy tiếp theo tuần, chỉ có nghĩa là một mô hình của dấu chấm, pixel như chúng được gọi, một bản đồ trên bit, thực sự. Vì vậy, những gì là thú vị, tuy nhiên, về định dạng tập tin này, BMP, là rằng bên dưới mui xe, nó có nhiều hơn chỉ là ba byte mà soạn tiêu đề của nó, vì vậy để nói chuyện, vài miếng đầu tiên. Nó thực sự có vẻ hơi phức tạp ở cái nhìn đầu tiên. Và bạn sẽ thấy điều này trong tập P. Và nhận được một cái gì đó ra cụ thể này ngay bây giờ không phải là quá quan trọng, vì chỉ thực tế rằng vào đầu mỗi bitmap tập tin, một định dạng đồ họa, có một bó toàn bộ các con số. Bây giờ Microsoft, tác giả của định dạng này, có xu hướng gọi những điều không ints và ký tự và nổi nhưng lời nói và d lời nói và chờ đợi và byte. Vì vậy, chúng chỉ là các kiểu dữ liệu khác nhau. Họ là những cái tên khác nhau cho cùng một điều. Tuy nhiên, bạn sẽ thấy rằng trong P Set Bốn. Nhưng điều này chỉ là để nói rằng nếu một con người double-click một số tập tin BMP vào mình hoặc ổ đĩa cứng của mình, và một cửa sổ mở ra lên cho anh ta hoặc cô hình ảnh, đã xảy ra bởi vì các điều hành hệ thống có lẽ nhận thấy không chỉ phần mở rộng tập tin BMP trong tên tập tin, nhưng cũng có một thực tế là có một số ước để mô hình của các bit ngay từ đầu của file bitmap. Nhưng bây giờ chúng ta tập trung vào một tập tin phức tạp như vậy, nhưng thay vào đó một cái gì đó như thế này. Giả sử ở đây trong GEdit, tôi chỉ có sự khởi đầu của một chương trình khá đơn giản. Tôi đã có một số bao gồm lên hàng đầu. Bây giờ tôi đã có # include "structs.h" nhưng Tôi sẽ trở lại đó trong một thời điểm. Nhưng điều này rất hữu ích cho bây giờ. Vì vậy, đây là một chương trình đó là sẽ thực hiện như cơ sở dữ liệu của công ty đăng ký. Vì vậy, một cơ sở dữ liệu của học sinh, và tất cả học sinh trên thế giới có một cái tên và một ngôi nhà và có lẽ một số công cụ khác, nhưng chúng tôi sẽ giữ nó đơn giản. Mỗi học sinh có một cái tên và một ngôi nhà. Vì vậy, nếu tôi muốn viết một Chương trình có mục đích trong cuộc sống chỉ để lặp từ số không vào đến ba, nếu có ba học sinh tại Đại học Harvard. Và tôi chỉ muốn có được, sử dụng GetString, Tên của mỗi học sinh và nhà ở, và sau đó chỉ cần in ra những điều này. Đây là loại giống như tuần Một, hai tuần thứ bây giờ, nơi mà tôi chỉ muốn có một cho vòng lặp hoặc một cái gì đó như thế. Và tôi muốn gọi một vài GetString lần, và sau đó in f một vài lần. Vì vậy, làm thế nào tôi có thể làm điều này, tuy nhiên, khi cả tên và một ngôi nhà tham gia cho mỗi học sinh? Vì vậy, bản năng đầu tiên của tôi có thể được để làm một cái gì đó như thế này. Lần đầu tiên tôi có thể nói, tốt, cho tôi, nói, một mảng các chuỗi gọi tên. Và tôi không muốn có một hardcode ba ở đây. Tôi muốn gì để đặt ở đó? Vì vậy, SINH VIÊN, bởi vì đó chỉ là một hằng số khai báo ở trên, chỉ vì vậy tôi không cần phải hardcode ba ở nhiều nơi. Bằng cách này, tôi có thể thay đổi nó một nơi, và nó ảnh hưởng đến sự thay đổi ở khắp mọi nơi. Và sau đó, tôi có thể làm chuỗi nhà HỌC SINH. Và bây giờ, tôi có thể làm điều gì đó như for (int i = 0; i