Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/64: Рейтинг темы: голосов - 64, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 4

Кодирование Base64 ошибки E0020 и C2660

18.06.2019, 10:33. Показов 13937. Ответов 2

Студворк — интернет-сервис помощи студентам
Пытался написать для алгоритма кодирования/декодирования base64 модуль для получения текста из файла и записи результатов в файл, но столкнулся с ошибками. В главном модуле (строка 37) ошибка e0020(идентификатор "с" не определен) и (строка 36) ошибка c2660 (функция не принимает 1 значение). Уже часа 3 сижу над проблемой, пока решал первую добавилась вторая, буду рад помощи.

Главный модуль
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
#include "pch.h"
#include "base64Head.h"
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, ".1251");
    string a, k;
    try
    {
        cout << "Input file way" << endl;
        cin >> a;
        ifstream file(a, ios::binary);
        if (!file)
            throw 'f';
        cout << "Input save file way" << endl;
        cin >> k;
        ofstream file1(k, ios::binary);
        if (!file1)
            throw 'f';
        file.seekg(0, file.end);
        int l = file.tellg();
        file.seekg(0, file.beg);
        char* str = new char[l + 1];
        file.read(str, l);
        int vote;
        cout << "Inpute mode\n1.Code\n2.Decode" << endl;
        cin >> vote;
        if (vote != 1 && vote != 2)
            throw 'm';
        if (vote == 1)
        {       
            string с = base64_encode(str, l);
            file1 << c;
        }
        if (vote == 2)
        {
            string c;
            c = base64_decode(str);
            file1 << c;
        }
    }
    //Обработка ошибок
    catch (char e)
    {
        switch (e)
        {
        case 'm':
        {
            cout << "Wrong mode" << endl;
            break;
        }
        case 'f':
        {
            cout << "Can't open file" << endl;
            break;
        }
        case 'i':
        {
            cout << "Wrong string" << endl;
            break;
        }
        }
    }
}
Заголовочный файл
C++
1
2
3
4
#include <string>
using namespace std;
string base64_encode(char*, int len);
string base64_decode(string const& 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
#include "pch.h"
#include "base64Head.h"
#include <iostream>
using namespace std;
// Использование 64 ьитного алфавита base64
static const string base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
// Проверка вводимых значений
static inline bool is_base64(unsigned char c) {
    return (isalnum(c) || (c == '+') || (c == '/'));
}
// Кодирум наш текст
string base64_encode(char* bytes_to_encode, int in_len) {
    string ret;
    int i = 0;
    int j = 0;
    char char_array_3[3];
    char char_array_4[4];
    // Запускаем цикл в котором выбираем по 3 байта и модифицируем их, как бы из 8 битного байта в 6 битный байт
    while (in_len--) {
        char_array_3[i++] = *(bytes_to_encode++);
        if (i == 3) {
            char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
            char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
            char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
            char_array_4[3] = char_array_3[2] & 0x3f;
            // То что получилось запишем в переменную ret
            for (i = 0; (i < 4); i++)
                ret += base64_chars[char_array_4[i]];
            i = 0;
        }
    }
    // Продолжаем, если отправили не пустое сообщение
    if (i)
    {
        for (j = i; j < 3; j++)
            // лобавляем в конце ноль, что бы сделать сишную строку
            char_array_3[j] = '\0';
        char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
        char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
        char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
        char_array_4[3] = char_array_3[2] & 0x3f;
        for (j = 0; (j < i + 1); j++)
            ret += base64_chars[char_array_4[j]];
        // Если байтов меньше 3, то вместо них записывается знак "=", сколько отсутствует столько и "="
        while ((i++ < 3))
            ret += '=';
    }
    return ret;
}
string base64_decode(string const& encoded_string) {
    int in_len = encoded_string.size();
    int i = 0;
    int j = 0;
    int in_ = 0;
    char char_array_4[4], char_array_3[3];
    string ret;
    // берем наш закодированную строку, идем обратном порядке и смотрим наличи пустых байтов
    while (in_len - (encoded_string[in_]!= '=') && is_base64(encoded_string[in_])) {
        char_array_4[i++] = encoded_string[in_]; in_++;
        // аналогичные действия в обратном порядке
        if (i == 4) {
            for (i = 0; i < 4; i++)
                char_array_4[i] = base64_chars.find(char_array_4[i]);
            char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
            char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
            char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
            for (i = 0; (i < 3); i++)
                ret += char_array_3[i];
            i = 0;
        }
    }
    if (i) {
        for (j = i; j < 4; j++)
            char_array_4[j] = 0;
        for (j = 0; j < 4; j++)
            char_array_4[j] = base64_chars.find(char_array_4[j]);
        char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
        char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
        char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
        for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
    }
    return ret;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2019, 10:33
Ответы с готовыми решениями:

Кодирование base64
Здравствуйте, заранее скажу что вопрос у меня специфичный и если не угадал с разделом прошу прощения... Недавно встретил участок кода...

Base64: кодирование и декодирование
Источник Функция кодирования: const char Base64Table = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;; ...

Кодирование и декодирование в base64
Доброго времени суток, форумчане. У меня проблема. Я интернете нашла пример как кодировать и декодировать. Попыталась его реализовать у...

2
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.06.2019, 12:06
Лучший ответ Сообщение было отмечено morfeyka как решение

Решение

Цитата Сообщение от morfeyka Посмотреть сообщение
В главном модуле (строка 37) ошибка e0020(идентификатор "с" не определен)
У тебя одна из 'с' там русская

Добавлено через 1 минуту
Цитата Сообщение от morfeyka Посмотреть сообщение
ошибка c2660 (функция не принимает 1 значение).
base64_encode(str.c_str(), l);
1
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 4
18.06.2019, 14:13  [ТС]
Спасибо за помощь, с русской раскладкой рил была ошибка, а вторую преобразование не решает, а добавляется еще одна "выражение должно иметь тип класса"(e0153)

Добавлено через 18 минут
я уже исправил вторую ошибку, там тоже дело было в опечатке)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.06.2019, 14:13
Помогаю со студенческими работами здесь

Кодирование текста BASE64
Помогите! При кодировании текста с английского кодирует и расшифровывает, а с русского – какие-то иероглифы (при расшифровывании). В чем...

Полное кодирование файла в base64
Доброго, добрые форумчане, нужна помощь по кодированию текста, есть пять элементов текста и они записуются в строчку (с новой строки) вот...

кодирование отправляемых картинок в Base64
ну вот, научился я отправлять файлы с помощью WinInet.dll, текстовики улетают на ура, а вот картинки и вообще всё нетекстовое - не хочет....

Base64-кодирование файла перед отправкой формы
Добрый день, уважаемые программисты. Я очень мало понимаю в HTML и, к сожалению, ничего не понимаю в JS. Набросал небольшую форму для...

Кодирование Base64 проблема с бинарным чтением файла
Есть следующий класс, где метод start() выполняет кодирование/декодирование Base64. #pragma once #include &quot;pch.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru