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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение файлов побайтово, Нужно научиться читать файлы побайтово 
:(
    Опции темы
Iganga
Дата 3.11.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здраствуйте уважаемые форумчане!

У меня воот какая задача. Я реализую алгоритм шифрования IDEA. Точнее все заморочки с реализацией уже позади остались.
Теперь проблема в том, что надо читать файлы для того чтоб их шифровать))))

Я по большей части C# кодер. С плюсами сталкивался, но не так тесно.
Мне нужно понять как читать файлы, например по 64 бит за раз.

Почему так, потому что на вход методу шифрования подаются четыре блока исходного текста по 16 бит.
Поетому мне бы хотелось попросить и совета и примера от Вас.

Вот пример кода, который я сейчас имею.
Код

#include <fstream>

#define MAX  1000000

struct portions {
        unsigned short p1;
        unsigned short p2;
        unsigned short p3;
        unsigned short p4;
} portions_by16bit[MAX];

int main()
{
  FILE *fp1,*fp2;
 char * buffer;
  int numread;
  long lSize;

  if((fp1=fopen("test.txt","rb"))==NULL){
    fprintf(stderr,"Can't open the plaintext_file");
      return 10;
      }

    fseek (fp1 , 0 , SEEK_END);
    lSize = ftell (fp1);
    rewind (fp1);

    buffer = (char *) malloc (sizeof(char) * lSize);
    int j = 0;

    do
    {
        numread=fread(&portions_by16bit[j],4,1,fp1);        
        j++;
    }
    while (numread != 0);
    
    for (int i = 0; i < 100; i ++)
    {
        std::cout <<portions_by16bit[i].p1<< "  ";
        std::cout <<portions_by16bit[i].p2 << "  ";
        std::cout <<portions_by16bit[i].p3 << "  ";
        std::cout <<portions_by16bit[i].p4 << std::endl;
    }
    return 0;
}


Я использую структуру. Поначалу там были char. Но чтот я либо уже сплю и мозг отключился.
Помогите плиз, очень нужн.
Для деффачки))) Она прогер у меня, это ж зашибись smile 

Спасибо заранее. 
Игнат.

PM MAIL ICQ   Вверх
boostcoder
Дата 3.11.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(Iganga @  3.11.2010,  20:19 Найти цитируемый пост)
#define MAX  1000000
struct portions {
        unsigned short p1;
        unsigned short p2;
        unsigned short p3;
        unsigned short p4;
} portions_by16bit[MAX];

чревато размещать на стеке 8 мильенов байт.

остальной код тоже корявый.

Цитата(Iganga @  3.11.2010,  20:19 Найти цитируемый пост)
#include <fstream>

с++ и Си нелепо смотрятся smile

Добавлено через 2 минуты и 54 секунды
Цитата(Iganga @  3.11.2010,  20:19 Найти цитируемый пост)
struct portions {
        unsigned short p1;
        unsigned short p2;
        unsigned short p3;
        unsigned short p4;
}

задача, читать файл, кусками, по sizeof(struct portions) в portions_by16bit по индексу?
PM WWW   Вверх
Iganga
Дата 3.11.2010, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 не сомневаюсь, что он корявый.

Нуна вот как, либо считать весь файл, а потои разбить это на куски по 64 бит
либо на куски по 16 бит.
Мне нужен совет и все варианты принимаются на УРА.

PM MAIL ICQ   Вверх
boostcoder
Дата 3.11.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



так:
Код

for (int idx = 0; !feof(fp1); ++idx ) {
   fread(&portions_by16bit[idx],sizeof(portions_by16bit[idx]),1,fp1);
};



Это сообщение отредактировал(а) boostcoder - 3.11.2010, 20:59
PM WWW   Вверх
Iganga
Дата 3.11.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а структуру мне в таком же виде оставить или поменять ее как то надо?
И вот еще вопрос.
Я спинным мозгом чуствую, что такое даж чайник не сделает
Код

#define MAX  1000000


Как быть с количеством стуктур?
PM MAIL ICQ   Вверх
boostcoder
Дата 3.11.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Iganga, правильным было бы, реализовать контейнер(массив) структур. динамический. и в него вставлять каждую прочитанную структуру.
так же, как вариант, создавать кол-во структур равное: file_size/sizeof(struct portions)

какой вариант Вам подходит - решать Вам.

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


Шустрый
*


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

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



Код

long struct_size = lSize / sizeof (struct portions);
    portions portions_by16bit[struct_size];


на такое ругается компилятор. требует константное значение для размера.
как быть?

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


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(Iganga @  3.11.2010,  21:21 Найти цитируемый пост)
как быть?

так:
Код

long struct_size = lSize / sizeof (struct portions);
portions* portions_by16bit = new portions[struct_size];


Добавлено через 1 минуту и 16 секунд
кстати. учтите ситуацию, когда размер файла не будет кратен "sizeof(portions)"
PM WWW   Вверх
Iganga
Дата 3.11.2010, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



учесть остаток от деления.

спасибо за советы, они очень помогли мне.
PM MAIL ICQ   Вверх
xvr
Дата 8.11.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Iganga @  3.11.2010,  20:53 Найти цитируемый пост)
Мне нужен совет
Совет - не надо читать ВЕСЬ файл. Достаточно читать файл по блокам (16 или 64 бита, на ваш выбор), шифровать блок, выводить его, и так далее, до исчерпания входного файла.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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