Форум программистов, компьютерный форум CyberForum.ru

Закодировать файл. Взять 7 байт. Первый бит каждого байта переместить в 8 байт - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Записать программу, выводящую изображенную фигуру http://www.cyberforum.ru/cpp-beginners/thread1118716.html
Пользователь вводит некий символ. Записать программу, выводящую изображенную на рис. 2.10 фигуру, где вместо символа «*» должен быть символ, введенный пользователем. ***** ** * ** *****
C++ UrlDecode, Работа с кириллицей Сам пишу на C#. Тут возникла задача "общания с прогой", написанной в С++ 6.0. Проблема возникла с передачей данных с русским текстом (как есть работает, но надо шифровать, поэтому заворачиваю в Base64, который как раз и неработает), при отсылке параметров решил кодировать в urlcode (например... http://www.cyberforum.ru/cpp-beginners/thread1118709.html
C++ Координаты вектора умножить на число
вот есть класс, мне нужно координаты вектора умножить на число,через функцию используя прототип.Как это сделать ? Функцию в С++ еще не проходили, сказали делать по подобию Си #include "stdafx.h" #include "iostream" using namespace std; class Vektor { public:
Калькулятор в столбик C++
Возникла проблема не понимаю почему при умножении 567 * 900 = 50103, (программа недробляна поэтому можно только умножать одинаковые цифры по количеству а точнее показывать цифры для сложение) void Multiplication_Of_Numbers() { int i = 0,j,o=0,tum=0,k0=0,sum; while (number.x>0) { number.mas = number.x % 10;number.x /= 10;//разъединяет числа (nnn на n,n,n) }
C++ Написать функцию выбора пунктов меню стрелками "вверх" "вниз" http://www.cyberforum.ru/cpp-beginners/thread1118692.html
Доброго всем времени суток.Пожалуйста подскажите как мне справиться с моей проблемой.Нужно написать функцию выбора пунктов меню стрелками "вверх" "вниз".Вот код #include <windows.h> #include <stdio.h> #include <iostream> #include <stdlib.h> #include <conio.h> using namespace std; void PrintglMenu(int &);
C++ Стек на массиве (выводит значение даже при пустом стеке) Здравствуйте, есть код со стеком, вопрос касательно метода класса,а точнее о выводе элемента из стека - pop(). Дело в том что программа выводит значения стека, даже когда он пуст,это же приводит к ошибке. Как правильно реализовать проверку на пустоту стека и изменить метод для правильной работы проги? int Stack::pop() { if (top > 0) return max_stack; // вытаскиваем из стека } САм код... подробнее

Показать сообщение отдельно
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
14.03.2014, 03:32     Закодировать файл. Взять 7 байт. Первый бит каждого байта переместить в 8 байт
Нужно открыть бинарный файл и закодировать следующим образом. Взять 7 байт. Первый бит каждого байта переместить в 8 байт. То есть, например:
10101010
01010110
00001100
00011000
00011000
00000111
00011100
Нужно превратить в:
0101010
1010110
0001100
0011000
0011000
0000111
0011100
1000000

И так до конца файла.
Написать две программы. Одна - шифрует таким образом, другая - расшифровывает.

Программа, которая шифрует
Кликните здесь для просмотра всего текста
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <stdlib.h>
#include <fstream>
 
 
using namespace std;
 
int dvoich (int chislo);
int decyatich (string chislo);
 
 
int main()
{   
    setlocale(0,"");
    char b;
    vector<unsigned int> s;
 
    ifstream f("input.bin", ios::binary| ios::out);
    while(!f.eof())
    {
        f.get(b);
        unsigned char z=static_cast <unsigned char > (b);
        s.push_back(z);
    }
 
    f.close();
 
    vector <string> kod;
    vector <string> poluch_kod;
    string l, k;
 
    ofstream z("output.bin", ios::binary | ios::out);
    z.close();
 
    for (int i=0; i<s.size(); i++)
        kod.push_back ( to_string (  dvoich (  s[i] ) ) ); // запись в переменную код даоичное представление кода
 
    for (int i=0; i<kod.size(); i++ )                // добавляю нули в началоЮ чтобы в каждой стороке было в 8 цифр
    {
        if (kod[i].size()!=8) 
        {
            int kolvo_dobavit=8-kod[i].size();
            string q="";
            for (int j=0; j<kolvo_dobavit; j++ )
                q.append("0");
            kod[i].insert(0,q);
        }
    }
 
    if ((kod.size ()%7!=0))                     //добавление нулей если не кратно 7
    { 
        int kolvo_dobavit= 7-(kod.size ()%7);
        for (int i=0; i<kolvo_dobavit; i++)
            kod.push_back("00000000");
    }
 
    while ( kod.size ()>0 )         // делаю преобразование по заданию
    {
        for (int i=0; i<7; i++)     // читаю по 7 элементов, записываю первые элементы в k, удаляю элементы 
        {
            string z="";
            z=kod[i];
            k.push_back(z[0]);
            kod[i].erase (0,1);
        }
 
        for (int j=0; j<7; j++)           // добавляю в полученный код первые 7 строчек без первого элемента
            poluch_kod.push_back(kod[j]);
 
        poluch_kod.push_back(k);        // добавляю 8 строкой строку к из первых символов 7 строк       
 
        kod.erase (kod.begin(),kod.begin()+7); // удаляю первые 7 элементов 
 
        k="";                                // очищаю к
 
        for (int i=0; i<8; i++)      // вывожу полученный вектор
        {
            ofstream q ("output.bin", ios::binary| ios::out | ios::app);
            q<<static_cast <unsigned char> (decyatich ( poluch_kod[i]));
            q.close();
        }
 
        poluch_kod.clear();           //очищаю полученный вектор
    }
 
 
    return 0;
}
 
int dvoich(int x1)   
{ 
    if (x1<0) x1=-x1;
 
    int i, b;  
    long c = 0;  
    for(i=0; x1 > 0; i++)  
    {
        b = x1 % 2;  
        x1 = (x1-b)/2;
        c += b * pow(10,i);
    }
    return c; }
 
int decyatich (string chislo)
{
    int lentxt=chislo.size();
    int k=0;
    double s=0;
    for (int i=lentxt-1; i>=0; i--)        //умножаем коэфициенты и выводим ответ
    {
        if (chislo[i]=='1')
            s=(int) s+pow(2.0,k);
        k++;
    }
    return s;
}


Программа, которая расшифровывает
Кликните здесь для просмотра всего текста
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <stdlib.h>
#include <fstream>
 
using namespace std;
 
int dvoich (int chislo);
int decyatich (string chislo);
 
 
int main()
{
    setlocale(0,"");
 
    char b;
    vector<int> s;
 
    ifstream f("output.bin", ios::binary | ios::out);
    while(!f.eof())
    {
        f.get(b);
        unsigned char z=static_cast <unsigned char > (b);
        s.push_back(z);
    }
 
    f.close();
 
    vector <string> kod;
    vector <string> poluch_kod;
    string l, k;
 
    ofstream z("output1.bin", ios::binary | ios::out);
    z.close();
 
    for (int i=0; i<s.size(); i++)
        kod.push_back ( to_string (  dvoich (  s[i] ) ) ); // запись в переменную код даоичное представление кода
 
    for (int i=0; i<kod.size(); i++ )                // добавляю нули в началоЮ чтобы в каждой стороке было по 7 цифр
    {
        if (kod[i].size()!=7) 
        {
            int kolvo_dobavit=7-kod[i].size();
            string q="";
            for (int j=0; j<kolvo_dobavit; j++ )
                q.append("0");
            kod[i].insert(0,q);
        }
    }
 
    while ( kod.size ()-1!=0 )         // делаю обратное преобразование по заданию
    {
        string z="";                   // беру 8 строк. из них беру последнюю и вставляю первые цифры на первое место в 7 строках
        z=kod[7];
 
        for (int i=0; i<7; i++)     
        {
            char z1=z[i];
            kod[i].insert(0, to_string (z1));
        }
 
        for (int i=0; i<7; i++)
        {
            ofstream q ("output1.bin", ios::binary| ios::out | ios::app);
            if (static_cast <unsigned char> (decyatich ( kod[i])))
                q<<static_cast <unsigned char> (decyatich ( kod[i]));
            q.close();
        }
        // вывожу в файл полученный код
 
        kod.erase (kod.begin(),kod.begin()+8);   // удаляю первые 8 элементов 
    }
 
 
 
 
 
 
 
    return 0;
}
 
int dvoich(int x1)   
{ 
    if (x1<0) x1=-x1;
 
    int i, b;  
    long c = 0;  
    for(i=0; x1 > 0; i++)  
    {
        b = x1 % 2;  
        x1 = (x1-b)/2;
        c += b * pow(10,i);
    }
    return c; }
 
int decyatich (string chislo)
{
    int lentxt=chislo.size();
    int k=0;
    double s=0;
    for (int i=lentxt-1; i>=0; i--)        //умножаем коэфициенты и выводим ответ
    {
        if (chislo[i]=='1')
            s=(int) s+pow(2.0,k);
        k++;
    }
    return s;
}


При вводе в начальный файл русских букв, а затем попытки расшифровки, файл расшифровывается неправильно. Что исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru