Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 3
Регистрация: 22.09.2011
Сообщений: 86

Считать информацию из одного файла, кодировать во второй и декодировать в третий

31.10.2011, 20:02. Показов 891. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, как сделать чтобы программа работала с файлом. Т.е. брала информацию из одного, кодировала во второй и декодировала в третий?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef unsigned int uint32_t;
 
void encrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
    for (i=0; i < num_rounds; i++) {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
        sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
    }
    v[0]=v0; v[1]=v1;
}
void decrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
    for (i=0; i < num_rounds; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
    }
    v[0]=v0; v[1]=v1;
}
int main()
{
    setlocale(LC_ALL,"rus");
    FILE *f;FILE *f2;
    f=fopen("1.txt","rb");
    f2 = fopen("2.txt","rb");
    while(!feof(f))
    {
        
    }
    /*uint32_t v[ 2 ] = { 0xBADDFACE, 0xacccdfac };
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    cout << "Текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    encrypt( 32, v, k );
    cout << "Зашифррованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    decrypt( 32, v, k );
    cout << "Расшифрованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;*/
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2011, 20:02
Ответы с готовыми решениями:

Из первого файла считать информацию, обработать, а результат записать во второй
Не могу написать программу. Нужно из первого файла считать информацию, обработать, а результат показать во втором файле. Дана програма: ...

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

Необходимо считать строки из одного файла и записать их в отсортированном количестве во второй
Здравствуйте, уважаемые участники форума! Не могли бы Вы проверить качество написания ответа на следующую задачку: Необходимо считать...

4
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
01.11.2011, 18:52
solomid, как я понял вы хотите использовать ifstream и ofstream потоки, как пример привожу вам работу с ifstream Указатель на файловый поток в качестве параметра функции
Кроме прямого извлечения данных из потока существуют специальные методы write и read, которіе позволяют записывать/считывать в/из файл целый текстовый блок, поля структур(ы) и т.д. По свободе подлатаю Ваш алгоритм, сразу скажу что о шифровании TEA не наслышан, поэтому правильность encrypt на ваших плечах. Если к тому времени как появится время никто не поможет выложу код сюда в топик

Добавлено через 3 минуты
PS:
Цитата Сообщение от solomid Посмотреть сообщение
FILE *f;FILE *f2;
* * * * f=fopen("1.txt","rb");
* * * * f2 = fopen("2.txt","rb");
- всмотревшись вижу вы хотите Си доступ к файлам организовать, что ж сути это не поменяет. Вообщем подождите немножко я вами в хорошем смысле єтого слова займусь

Добавлено через 8 часов 1 минуту
Вот как я это вижу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <cstdlib>
using namespace std;
 
//Ðóññèôèêàöèÿ
ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='¸')
                        stream<<char(241);
                else if(*ps=='¨')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}
 
typedef unsigned int uint32_t;
 
void encrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
    for (i=0; i < num_rounds; i++) {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
        sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
    }
    v[0]=v0; v[1]=v1;
}
void decrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
    for (i=0; i < num_rounds; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
    }
    v[0]=v0; v[1]=v1;
}
 
int main()
{
    setlocale(LC_ALL,"rus");
 
    uint32_t v[ 2 ] /*= { 0xBADDFACE, 0xacccdfac }*/;
    FILE * f = fopen("text.txt","r");
    fscanf(f,"%X%X",&v[0],&v[1]);
    fclose(f);
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    cout << "Òåêñò: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    encrypt( 32, v, k );
    cout << "Çàøèôððîâàííûé òåêñò: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    decrypt( 32, v, k );
    cout << "Ðàñøèôðîâàííûé òåêñò: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
}
text.txt
0xBADDFACE 0xacccdfac


Цитата Сообщение от solomid Посмотреть сообщение
uint32_t k[ 8 ] = { *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010
* * * * * * * * * * * *};
- как я понимаю это что-то вроде ключа алгоритма, так зачем его закоментили?

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
setlocale(LC_ALL,"rus");
- на старье это не работает, рекомендую
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
//Руссификация
ostream& operator<<(ostream &stream,char* s){
* * * * for(char* ps=s; *ps; ps++){
* * * * * * * * if(*ps=='ё')
* * * * * * * * * * * * stream<<char(241);
* * * * * * * * else if(*ps=='Ё')
* * * * * * * * * * * * stream<<char(240);
* * * * * * * * else if(*ps>=-64 && *ps<=-17) * * * * * * * * *
* * * * * * * * * * * * stream<<char(*ps+64+128);
* * * * * * * * else if(*ps<0)
* * * * * * * * * * * * stream<<char(*ps+64+176);
* * * * * * * * else
* * * * * * * * * * * * stream<<*ps;
* * * * }
* * * * return stream;
}
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
fscanf(f,"%X%X",&v[0],&v[1]);
- просто сканируе hex-ы из файла, если в файл нужно поместить и это
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
uint32_t k[ 8 ] = { *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010
* * * * * * * * * * * *};
, то могу доработать, просто конкретно запишите что в файлах записано и тогда подгоню программу под данные файлов
1
1 / 1 / 3
Регистрация: 22.09.2011
Сообщений: 86
01.11.2011, 20:31  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- как я понимаю это что-то вроде ключа алгоритма, так зачем его закоментили?
да, это ключ для шифрования, а закоментил по глупости

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если в файл нужно поместить и это
нет,ключ имеется в теле программы,так нормально
а как сделать чтобы в файле мог содержаться любой текст и без ограничений? т.е. не только определенное количество блоков с 16-ным кодом? это вобще возможно

Добавлено через 33 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
просто конкретно запишите что в файлах записано и тогда подгоню программу под данные файлов
Правильнее вот так,из первого файла считывает исходный текст, во второй записывает закодированый текст, и в третий уже раскодированый из второго

Добавлено через 51 минуту
вот что типа такого но только это не коректно работает, а именно считывает вроде бы все но записывает кодированый текст ограничено, т.е. 16 символов... и декодирует в файле не верно что-то...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
uint32_t v[ 2 ];
        FILE * f = fopen("1.txt","r");
        fscanf(f,"%X%X",&v[0],&v[1]);
        fclose(f);
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    FILE * f2 = fopen("2.txt","w");
    encrypt(32,v,k);
        fprintf(f2,"%X%X",v[0],v[1]);
    fclose(f2);
 
 
    f2 = fopen("2.txt","r");
    fscanf(f2,"%X%X",&v[0],&v[1]);
    
    FILE * f3 = fopen ("3.txt","w");
        decrypt(32,v,k);
    fprintf(f3,"%c%c",v[0],v[1]);
       fclose(f3);
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
01.11.2011, 21:18

Не по теме:

Цитата Сообщение от solomid Посмотреть сообщение
а как сделать чтобы в файле мог содержаться любой текст и без ограничений? т.е. не только определенное количество блоков с 16-ным кодом? это вобще возможно
- да легко;)Скоро отпишусь...



Добавлено через 28 минут
solomid, пробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int main()
{
    uint32_t v[2];
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    FILE * f = fopen("text.txt","rb");
    while(!feof(f))
    {
        fscanf(f,"%X%X",&v[0],&v[1]);
        cout << "Текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
        encrypt( 32, v, k );
        cout << "Зашифррованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
        decrypt( 32, v, k );
        cout << "Расшифрованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    }
    fclose(f);
    system("pause");
    return 0;
}
1
1 / 1 / 3
Регистрация: 22.09.2011
Сообщений: 86
01.11.2011, 22:24  [ТС]
все, то что нужно, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2011, 22:24
Помогаю со студенческими работами здесь

Кодировать и декодировать unicode
Есть текст crkz = '\u0438\u0437 \u041a\u0438\u0442\u0430\u044f \u0432\u043e \u0432\u0441\u0435 \u0433\u043e\u0440\u043e\u0434\u0430...

Как вручную кодировать и декодировать текст?
здрасьте. у меня другой вопрос: как то же самое реализовать вручную? по какому принципу? (начало обсуждения в теме...

Кодировать/декодировать данные по протоколу RSA
Делаю алгоритм рса, зашифровал в файл свою последовательность, теперь нужно её же считать и расшифровать. import random, codecs def...

Как кодировать и декодировать файлы алгоритмом Rijndael
Может кто нибудь подскажет код как кодировать и декодировать файлы алгоритмом Rijndael ? Примного благодарен)

Почему нужно кодировать и декодировать данные при передаче по сети
Socket handler = sListener.Accept(); string data = null; // Мы дождались клиента, пытающегося с нами соединиться ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru