Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 13, 2011 16:18:46

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

побитовое чтение

Добрый вечер уважаемые !
Такая проблемма для реализации одного из алгоритмов шифрования необходимо побитово считать файл с диска ….
как это сделать ???

def read_file(path):
f = open(path,'rb');
file = f.read();
for x in file:
bin_mas = bin_mas + dec_in_bin(x)
f.close();
пока реализовал так…, но все равно считывание происходит в десятичной системе, а потом приходится преобразовывать в двоичную …,



Офлайн

#2 Ноя. 13, 2011 16:42:56

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

побитовое чтение

br3d
считывание происходит в десятичной системе
Это не так, считывание происходит если только так можно сказать в двоичной системе. Те на диске последовательность 0 и 1 и в памяти тоже. Двоичное, шестнадцатеричное, десятичное - эти понятия относятся к строке которая выводится на дисплей т.е. к форматированному условному представлению. Можно написать форматировщик вывода римскими цифрами или вообще палочками - как в первом классе числа представляли.



Офлайн

#3 Ноя. 13, 2011 16:45:41

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

побитовое чтение

doza_and
Это не так, считывание происходит если только так можно сказать в двоичной системе. Те на диске последовательность 0 и 1 и в памяти тоже. Двоичное, шестнадцатеричное, десятичное - эти понятия относятся к строке которая выводится на дисплей т.е. к форматированному условному представлению. Можно написать форматировщик вывода римскими цифрами или вообще палочками - как в первом классе числа представляли
тоесть если полученный результат преобразования в бинарную систему я запишу в файл то он откроется как текст ????
помоему не откроется, для этого что то еще надо сделать мне кажется….



Офлайн

#4 Ноя. 13, 2011 17:36:26

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

побитовое чтение

Это как в матрице “нет никакого текста” все эти данные - двоичные чилса
Файл откроется в редакторе, и там как и положено будут кракозябры. Нормальные такстовые редакторы позволяют просмотреть файл в hex или даже bin режиме.
то что вы хотите - форматирование чисел с использованием функции bin()

>>> bin(ord("a"))
'0b1100001'
>>> hex(ord("a"))
'0x61'
но повторюсь - текстовые редакторы это тоже умеют.



Отредактировано (Ноя. 13, 2011 17:37:52)

Офлайн

#5 Ноя. 13, 2011 17:45:46

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

побитовое чтение

Это все понятно ! но дупустим у меня такая задача:
считать файл изменить первый бит записать обратно и открыть просмотрев результат… (т.е. какой из символов как изменится)



Офлайн

#6 Ноя. 13, 2011 18:14:26

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

побитовое чтение

могу сразу сказать - изменится первый символ



Офлайн

#7 Ноя. 13, 2011 18:23:57

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

побитовое чтение

да это все понятно ! я просто хотел увидеть код, ка кэто будет выглядеть !



Офлайн

#8 Ноя. 13, 2011 19:47:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

побитовое чтение

with open("xxx","w") as fout:
fout.write("".join(map(lambda x:bin(ord(x)))[2:],open("fin","rb").read()))
не ручаюсь, но похоже так
Сие произведение надо назвать както так:
преобразование содержимого файла в строку, содержащую букву “1” в той позиции где были единичные биты и букву “0” в той позиции где были нулевые биты с последующей записью этой строки в файл.



Отредактировано (Ноя. 13, 2011 19:52:33)

Офлайн

#9 Ноя. 14, 2011 00:20:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9973
Репутация: +  856  -
Профиль   Отправить e-mail  

побитовое чтение

br3d
Это все понятно ! но дупустим у меня такая задача:
считать файл изменить первый бит записать обратно и открыть просмотрев результат
минимальная единица данных в файле - байт
поэтому, чтобы поменять какой-нибудь бит в файле, нужно достать соответствующий байт, поменять в нём нужный бит и записать этот байт обратно
при этом байт должен оказаться на том же месте, где и был

br3d
да это все понятно ! я просто хотел увидеть код, ка кэто будет выглядеть !
код должен быть разреженным и понятным без всяких комментариев
выполни import this и прочитай там правила



Отредактировано (Ноя. 14, 2011 00:23:51)

Офлайн

#10 Ноя. 14, 2011 08:41:30

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

побитовое чтение

Спасибо !!! помогли! только видимо мне не сильно подойдет это так как читать надо именно побитово …,
надо получить массив байт отредактировать его …, а потом опять записать в файл .., но так как разделители туда не воткнешь.., то придется придумывать что то другое…,(

Благодарю всех !



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version