Подскажите как читать\писать byte\word\dword ?

 
0
 
Python
ava
EvilsInterrupt | 01.03.2012, 11:46
Мне часто приходится работать с файлами на уровне байтов, word-ов, dword-ов, а в последнее время и qword-ов.
Но пока это делаю только в С\С++\Асм программах. Очень хочется научиться читать\писать и на Python.

Вот пример кода на С:


// возможные проверки по перекрытию областей опущены ради простоты кода
void decrypt(unsigned char* out, const unsigned char * in, int len)
{
for(int i=0; i<len; i++)
{
unsigned char tmp = in[i];
tmp ^= key_value;
out[i] = tmp;
}
}


Почитав офиц. справку увидел модуль struct. Однако его применение выглядит немного угловато и мне хочется
узнать а есть ли другие способы?

später ergänzt:

Что конкретно хочется иметь?
1) простоту записи\чтения байта\word\dword\qword-значения
2) Простоту перемещения к следующему byte\word\dword\qword
Kommentare (7)
ava
Backward | 02.03.2012, 03:05 #
Посмотрите модуль array, мне кажется он больше подходит для Вашей задачи
ava
EvilsInterrupt | 02.03.2012, 22:34 #
Backward,
Спасибо! Уже читаю. Не сочтите за "дайте рыбку", но как бы вы стали его применять?

ЗЫ:
Может будет интересно кому, столкнулся сегодня с MessagePack был рад знакомству с этой, BSON рядом не стоял )
ava
Backward | 05.03.2012, 02:25 #
Ну так, на пример:

import array
import os

def decript(infile, key):
ain = array.array("B")
aout = array.array("B")

with open(infileб "rb") as f:
ain.fromfile(f, os.path.getsize(infile))

aout.extend(x ^ key for x in ain)
return aout
ava
EvilsInterrupt | 05.03.2012, 21:10 #
Backward,
Я правильно понимаю что array это обычный лист только содержит строго к одному типу элементы?
ava
Backward | 06.03.2012, 03:06 #
Цитата (EvilsInterrupt @ 5.3.2012, 21:10 findReferencedText)
array это обычный лист только содержит строго к одному типу элементы?

Ну если в очень грубом приближении, то можно и так сказать, не забывая при этом, что array гораздо более экономичен в плане используемых ресурсов.
ava
EvilsInterrupt | 06.03.2012, 21:37 #
Спасибо, вопрос решен!
ava
Karadul | 14.05.2012, 18:47 #
Если надо читать/писать двоичные данные - struct.{pack|unpack}
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden