Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите как читать\писать byte\word\dword ? 
V
    Опции темы
EvilsInterrupt
Дата 1.3.2012, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



Мне часто приходится работать с файлами на уровне байтов, 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. Однако его применение выглядит немного угловато и мне  хочется
узнать а есть ли другие способы?

Добавлено через 2 минуты и 38 секунд

Что конкретно хочется иметь?
1) простоту записи\чтения байта\word\dword\qword-значения
2) Простоту перемещения к следующему byte\word\dword\qword

PM MAIL WWW ICQ Jabber   Вверх
Backward
Дата 2.3.2012, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Посмотрите модуль array, мне кажется он больше подходит для Вашей задачи
PM MAIL   Вверх
EvilsInterrupt
Дата 2.3.2012, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



Backward, 
Спасибо! Уже читаю. Не сочтите за "дайте рыбку", но как бы вы стали его применять?

ЗЫ:
Может будет интересно кому, столкнулся сегодня с MessagePack был рад знакомству с этой, BSON рядом не стоял )
PM MAIL WWW ICQ Jabber   Вверх
Backward
Дата 5.3.2012, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Ну так, на пример:
Код

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

PM MAIL   Вверх
EvilsInterrupt
Дата 5.3.2012, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



Backward, 
Я правильно понимаю что array это обычный лист только содержит строго к одному типу элементы?
PM MAIL WWW ICQ Jabber   Вверх
Backward
Дата 6.3.2012, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Цитата(EvilsInterrupt @  5.3.2012,  21:10 Найти цитируемый пост)
array это обычный лист только содержит строго к одному типу элементы? 

Ну если в очень грубом приближении, то можно и так сказать, не забывая при этом, что array гораздо более экономичен в плане используемых ресурсов.
PM MAIL   Вверх
EvilsInterrupt
Дата 6.3.2012, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



Спасибо, вопрос решен!
PM MAIL WWW ICQ Jabber   Вверх
Karadul
Дата 14.5.2012, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Если надо читать/писать двоичные данные - struct.{pack|unpack}
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2294 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.