I'm writing a code that takes a 5-bit binary string from a file 'message.txt', converts it to integers. The encoded letters are assigned numbers starting with a=1, b=2, etc. So if the original letter is 'a' and the key(fixed number of spaces) is 2, the encoded letter is 'c' which is converted to 3, so the file will contain binary string 0011.

My job is to decode the message. There are only 26 possible keys(0-25).

I'm very confused on how to figure out the keys. I've already converted the binary to integers, but now I'm stuck. I have absolutely no clue where to go in my assigned decodeCharacterString() function.

My code is a little sloppy, but its still in test phase, so please bare with me. I attached the 'message.txt' file and also the complete problem (problem.txt). Please help!

``````#include<iostream>
#include<fstream>
#include<cmath>
#define ARRAY_SIZE 999999
void decodeCharacterString(char []);
void binaryStringToInt(char [], int &);
void reverseString(char []);
using namespace std;

int main()
{
char binary[ARRAY_SIZE];
int number;
//numArray[ARRAY_SIZE]

ifstream inFile;
inFile.open("message.txt", ios::in);

if(inFile.is_open())
{
while(inFile >> binary)
{

binaryStringToInt(binary, number);
cout << number << ",";        //GOOD TO HERE

//decodeCharacterString(numArray);
}
}
else
cout << "File open error" << endl << endl;

system("pause");
return 0;
}

/*void decodeCharacterString(int n)
{
char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

int n = 0;
while(n != '\0')
{
cout << b[n] << endl;
n++;
}

}*/
void binaryStringToInt(char bin[], int &num)
{

int total=0,
exp = 0,
dec = 0,
n = strlen(bin);

for(int i = 0; i < n; i++)
{
if(bin[i] == '1')
num = 1;
else
num = 0;

dec = num * static_cast<int>(pow(2.0,exp));
total = total + dec;
exp++;
}
reverseString(bin); //reverse string again for output to main()
num = total;        //total integer representation
}
void reverseString(char b[])
{
int n = strlen(b)-1;
for(int i = 0; i < n; i++)
{
char temp = b[i];
b[i] = b[n];
b[n] = temp;
n--;
}
}``````
Attachments
``01011 11001 10110 10100 10010 10110 01010 10010 01001 10100 10000 00111 11001 10110 01001 11010 01010 00101 00110 01011 01101 10110 01001 10000 01010 10110 10100 01100 01001 10110``
1
Contributor
1
2
Views
8 Years
Discussion Span
Last Post by bmos31

Ok, so I've actually pretty much figured out everything including the key, which is 17.

So I have all my integers converted to the correct decoded integers, but now I need to convert them to the ASCII which should read "THECAESARCYPHERISNOTVERYSECURE"
from what my program returns so far:
20,8,5,3,1,5,19,1,18,3,25,16,8,5,18,9,19,14,15,20,22,5,18,25,19,5,3,21,18,5,

heres my updated code...maybe I should remove my 'alpha' array in my 'decodeCharacterString() function? Where do I go from there?

``````#include<iostream>
#include<fstream>
#include<cmath>
#define ARRAY_SIZE 999999

//function prototypes
void decodeCharacterString(char [],int, int);
void binaryStringToInt(char [], int &);
void reverseString(char []);
using namespace std;

int main()
{
char binary[ARRAY_SIZE];
int number;
int key = 17;

ifstream inFile;
inFile.open("message.txt", ios::in);

if(inFile.is_open())
{
while(inFile >> binary)
{

decodeCharacterString(binary, number, key);
}
}
else
cout << "File open error" << endl << endl;

system("pause");
return 0;
}

void decodeCharacterString(char b[],int n, int k)
{

binaryStringToInt(b, n);
if(n < 18)
n = n - k + 26;
else
n = n-k;
cout << n << ",";     //TEST    GOOD TO HERE

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

}
void binaryStringToInt(char bin[], int &num)
{

int total=0,
exp = 0,
dec = 0,
n = strlen(bin);

for(int i = 0; i < n; i++)
{
if(bin[i] == '1')
num = 1;
else
num = 0;

dec = num * static_cast<int>(pow(2.0,exp));
total = total + dec;
exp++;
}
reverseString(bin); //reverse string again for output to main()
num = total;        //total integer representation
}
void reverseString(char b[])
{
int n = strlen(b)-1;
for(int i = 0; i < n; i++)
{
char temp = b[i];
b[i] = b[n];
b[n] = temp;
n--;
}
}``````
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.