2016-06-16 2 views
3

У меня два одинаковых изображения .fit.Почему hex-edit не является обратимым?

Linux @ Linux: ~/ГИМ/ImageTesting # sha256sum hexd_ss.fit ss.fit

dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0 hexd_ss.fit dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0 ss.fit

Я изменил один бит от hexd_ss.fit

Linux @ Linux: ~/imgs/ImageTesting # vi hexd_ss.fit

От

0000 0000 

К

0000 0001 

Таким образом, я получил два различных размера файла и различные хэш

> [email protected]:~/imgs/ImageTesting# ls -l total 9344 
> -rw-r--r-- 1 root root 4781261 Jun 16 15:45 hexd_ss.fit 
> -rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit 
> 

Linux @ Linux: ~/ГИМ/ImageTesting # sha256sum hexd_ss.fit ss.fit

f3277110043b4170c111fa7d4291aa7df23de68c9e504259ae6158e5133faf1a hexd_ss.fit dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0 ss.fit

Но когда я изменился, что бит 0 снова, как и прежде, остаются неизменными в размерах и, а также две разные хэш.

После изменения

> 0000 0001 to > 0000 0000 

[email protected]:~/imgs/ImageTesting# ls -l 

-rw-r--r-- 1 root root 4781261 Jun 16 15:47 hexd_ss.fit 
-rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit 

Даже если я изменить две ноль байт два один байт размер также остаются одинаковыми. Как,

0000 1111 

[email protected]:~/imgs/ImageTesting# ls -l 

-rw-r--r-- 1 root root 4781261 Jun 16 15:47 hexd_ss.fit 
-rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit 

Так что мои вопросы -

  1. Почему его не представляется возможным обратный HexEdit?
  2. Как или какой другой способ изменить направление на исходное?
+0

Название и ключевой вопрос здесь немного странно сформулированы.Вы просто хотите знать, почему размер файла изменяется, а затем не изменяется? –

+0

Возможно, я что-то пропустил, но почему это немного изменило размер файла? Возможно, вы случайно удалили байт, дополнительно. –

+0

Я в основном хочу знать, как вернуть файл с шестнадцатеричным изменением в исходный. Я использовал vi с ':%! Xxd' – meAbab

ответ

5

Я открыл python3.5 бинарного с vi python3.5, затем сделал :%!xxd, :%!xxd -r, :wq ... и в конечном итоге с файлом, что это 1 байт больше. Заметьте, что я даже ничего не редактировал. Вы должны использовать

vi -b <file> 

открыть бинарные файлы с vi ... или они получают преобразованные при их открытии: P

Моего python3.5 двоичным получил 0a прилагается к нему - перевод строки. После удаления этого байта файл был точно таким же, как и оригинал.

+0

Вы правы, моя ошибка заключалась в том, чтобы использовать -b-переключатель как двоичный режим. во время поиска, почему это так, я нашел хороший вопрос и ответ дано [здесь] (http://stackoverflow.com/questions/13676528/difference-between-text-mode-and-binary-mode-in-c) – meAbab

+0

@meAbab Hm, что Q & A только поверхностно связано, поведение перевода 'lf' в' crlf', как описано в этом вопросе, является специфичным для ОС, а 'vi' этого не делает. Добавление 'lf' на' vi' - это просто поведение 'vi'. Некоторые редакторы ведут себя так, как 'gedit' и' pico'. Но, например, 'mousepad' не делает. – Arjan

Смежные вопросы