2017-02-11 3 views
0

Итак, текстовые файлы можно скопировать и вставить в другое место, скопировав содержимое исходного файла в пустой текстовый файл. Это можно сделать с помощью текстового редактора. Выделите содержимое текстового файла, скопируйте, создайте новый пустой текстовый файл, вставьте его в него.Содержимое исполняемых файлов не может быть скопировано?

Но почему нельзя копировать и вставлять изображения, аудио, видео, исполняемые файлы и т. Д. Так? Например, я открываю исполняемый файл с текстовым редактором, копирую все содержимое, создаю новый пустой текстовый файл, меняю расширение на .exe и вставляю в него (через текстовый редактор). Но файл не может быть запущен. Зачем?

Кроме того, я хотел был бы иметь возможность редактировать эти типы файлов как я делаю с текстовыми файлами. Есть ли способ?

+2

Поскольку текстовый редактор, который вы используете, отображает только печатные символы или заменяет непечатаемые символы пробелами, прямоугольниками или другой тарабарщиной. Когда вы копируете это, вы копируете разбитое представление файла. Вам нужно открыть двоичные файлы (это то, что они называются) в чем-то вроде hex-редактора. (Затем также вставьте шестнадцатеричный редактор.) –

+0

@AndrewCheong Wow! Спасибо за информацию! – cppxor2arr

ответ

1

Поскольку исполняемые файлы и файлы мультимедиа являются «двоичными» файлами. Текстовые файлы также двоичные, но разные. Все файлы создаются двоично, но некоторые из них создаются более бинарно, чем другие.

Вы открываете двоичный файл в текстовом редакторе. Это немедленно изменяет семантику байтов. Основная проблема состоит в том, что байты содержат значение, которое соответствует тем, которые имеют символы новой строки, если это текстовый файл (0x0A и 0x0D), который будет отображаться как зависящая от платформы строка (например, \r\n на Windows). Когда вы копируете это, вы изменили либо 0x0A, либо 0x0D на номер 0x0D 0x0A.

Затем есть контрольные символы или символы, не подлежащие печати. Не все байты между 0x00 и 0xFF могут быть представлены как символ. Они будут либо опущены, либо заменены отображаемым символом.

Поэтому, когда вы копируете текст, содержащий их, они будут опущены или иным образом искалечены.

В заключение: вы не можете надежно использовать текст для отображения всех возможных значений байта, если вы не решите кодировать значения байтов, как это делается с использованием, например, кодировки Base64.

Если вы хотите отредактировать двоичный файл, используйте редактор, который знает об этих байтах: «hex editor». Обратите внимание, что изменение случайных байтовых значений в двоичном файле не гарантирует здравомыслия этого файла: в формате могут быть встроены контрольные суммы, и ваше редактирование приведет к аннулированию контрольной суммы.

+0

Итак, мне нужен шестнадцатеричный редактор! Большое спасибо. Еще один вопрос. Почему не содержимое исполняемых файлов 0s и 1s? Разве это не то, что понимает процессор? – cppxor2arr

+2

Содержимое _every_ файла состоит из единиц и нулей. Это всего лишь вопрос представительства. Вы предпочли бы читать '0b01000001',' 0x41', '65' или' A'? – CodeCaster