Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // Prog01
- //
- // Created by Бернат Данила on 12/24/19.
- // Copyright © 2019 Данила Бернат. All rights reserved.
- //
- #include <stdio.h>
- #include <stdlib.h>
- #include <iostream>
- #include <stdlib.h>
- #include <bitset>
- using namespace std;
- void conv16to2(string *trans)
- {
- string c = *trans;
- int dec = 0;
- int len = c.length();
- int n = 1;
- for (int i = len - 1; i >= 0 ; i--){
- if ('0' <= c[i] && c[i] <= '9')
- dec += int(c[i] - '0') * n;
- else
- dec += (10 + int(c[i] - 'A')) * n;
- n *= 16;
- }//перевод в 10
- n = 0;
- int ost;
- char transIn2[10] = "";
- do{
- ost = dec % 2;
- if (ost < 10)
- transIn2[n] = char('0' + ost);
- else
- transIn2[n] = char('A' + ost - 10);//перевод в 2
- n++;
- dec /= 2;
- }while(dec);
- //len = strlen(transIn2);
- int i=0;
- while (transIn2[i] != '\0')
- i++;
- len=i;
- c="";
- for (int i = len - 1; i >= 0; i--){
- c=c+transIn2[i];
- }
- *trans=c;
- }
- int conv2to10(string trans)
- {
- return bitset<32>(trans).to_ulong();
- }
- int main() {
- const string base64_chars =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789+/";
- string inputStr, outputStr="";
- int number; cin>>number;//кол-во символов
- string usefull; getline(cin, usefull);//для корректного воода
- getline(cin, inputStr);//
- inputStr=inputStr+" ";//
- const unsigned long strLength=inputStr.length();//длина строки
- string binStr="";//строка для хранения временного бинарного кода
- int strArrNum = number*8/6;
- while (strArrNum % 4 != 0){
- strArrNum++;
- }
- string strArr[strArrNum]; //массив кода для base64 символов
- int strArrNumCopy=strArrNum;
- strArrNum=0;
- //цикл с конвертацией в бинарный код
- int leftBorder=0, rightBorder;//края символа
- string trans="";//строка с 16ричным числом
- for (int i=0; i<strLength; i++)
- {
- if (inputStr[i]==' '){
- rightBorder = i - 1;
- for (int j=leftBorder; j<=rightBorder; j++){//выделение числа
- trans=trans+inputStr[j];
- }
- conv16to2(&trans);//получил значиние переведенное в двоичную систему
- while (true)//проверка с подстановкой 0
- if (trans.size()<8){trans="0"+trans;}else{break;}
- binStr=binStr+trans;
- while (binStr.size()>=6)//цикл по переводу бинарного кода в массив строк
- {
- strArr[strArrNum].insert(0, binStr, 0, 6);
- strArrNum++;
- binStr.erase(0, 6);
- }
- trans="";
- leftBorder=rightBorder+2;
- }
- }
- if (strArrNum<strArrNumCopy && strArr[strArrNum].size()<6){
- strArr[strArrNum]=binStr;
- }
- while (strArr[strArrNum].length()<6)
- strArr[strArrNum]=strArr[strArrNum]+"0";
- //на этом этапе массив строк хранит в себе код который нужно перевести в base64 символы;
- int base64Num;
- strArrNum=strArrNumCopy;
- for (int i=0; i<strArrNum; i++)
- {
- if(strArr[i]==""){outputStr=outputStr+"=";}
- else{
- base64Num=conv2to10(strArr[i]);
- outputStr=outputStr+base64_chars[base64Num];
- }
- }
- cout<<outputStr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement