Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 00:19   #1
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию Декодер base64 не раскодирует картинки

Ребят, подскажите, почему программа не раскодирует закодированные картинки? Посмотрите, кому не сложно, пожалуйста=))





#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
//по символу из файла base64 находим соответсвующee двоичное число вида 00****** для дальнейшей обработки
unsigned char Base64Char(char b)
{
char q[66]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg hijklmnopqrstuvwxyz0123456789+/=";
for (int i=0; i<65; i++)
if (b==q[i]) return i;
return 0;
}
//четыре байта информации из фаила base64 переводим в три байта информации файла в кодировке ascii
void decoderbase64(char* sin, char* sout)
{
char a1,a2,a3;
a1=a2=a3=0;
a1=(sin[0]<<2)|((sin[1] & 0x30)>>4);
if (sin[2]==64) a2=0;
else a2=(sin[1]<<4)|(sin[2]>>2);
if (sin[3]==64) a3=0;
else a3=(sin[2]<<6)|(sin[3]);
sout[0]=a1;
sout[1]=a2;
sout[2]=a3;
}

int main(int argc, char* argv[])
{
char fname[1024];
if(argc>1) strcpy(fname, argv[1]);
else{cout<<"Source file: "; cin.getline(fname,1024);}

ifstream inFile(fname);
if(!inFile){cout<<"Can not open file "<<fname<<endl; system("pause"); return 1;}

if(argc>2) strcpy(fname,argv[2]);
else {char w[5]; cout<<"Input rasshirenie of the file :"; cin>>w; strcat(fname, w);}

ofstream outFile(fname);
if(!outFile){cout<<"Can not write to file "<<fname<<endl; system("pause"); return 2;}
int i=0;//бежим по символам в исходном файле
//пока файл base64 не закончен берем из него по четыре байта ин-ции, обрабатываем в функции decoderbase64 и выводим в файл с нужным расширением
char instr[4], outstr[3], x;
while (!inFile.eof())
{
i=0;
inFile>>x;
instr[i++]=Base64Char(x);
inFile>>x;
instr[i++]=Base64Char(x);
inFile>>x;
instr[i++]=Base64Char(x);
inFile>>x;
instr[i++]=Base64Char(x);
decoderbase64(instr, outstr);
outFile.write(outstr,3);
}
inFile.close();
outFile.close();
system ("pause");
return 0;
}
dollemika вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Base64 GoldmasteR Общие вопросы Delphi 10 06.01.2011 18:37
Морзе декодер(с++) jambas92 Помощь студентам 3 14.11.2010 11:32
base64 beemoto Общие вопросы Delphi 0 24.04.2010 21:58
base64 Dimarik Win Api 0 10.04.2010 18:59
base64 BlackOmen Общие вопросы Delphi 2 02.05.2008 16:30