aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrPatrickWarner <[email protected]>2024-05-04 18:10:27 -0700
committerrPatrickWarner <[email protected]>2024-05-04 18:10:27 -0700
commita6a32a3705fa04d7b52c301f7116c3a5705b854c (patch)
tree1601ee9464203c5bbed6634364b5fb5914f007a5
parentAdded binary file reading function (diff)
downloadhomework-1-reecepwarner-a6a32a3705fa04d7b52c301f7116c3a5705b854c.tar.xz
homework-1-reecepwarner-a6a32a3705fa04d7b52c301f7116c3a5705b854c.zip
base64 encoding improvements
-rw-r--r--CST 126/Homework2/Base64Conversion.hpp54
-rw-r--r--CST 126/Homework2/Base64Helper.hpp89
-rw-r--r--CST 126/Homework2/FindingPi.exe1
-rw-r--r--CST 126/Homework2/Homework2.vcxproj1
-rw-r--r--CST 126/Homework2/Homework2.vcxproj.filters1
-rw-r--r--CST 126/Homework2/destination_file.txt1
-rw-r--r--CST 126/Homework2/main.cpp55
-rw-r--r--CST 126/Homework2/randomtext.txt3
8 files changed, 179 insertions, 26 deletions
diff --git a/CST 126/Homework2/Base64Conversion.hpp b/CST 126/Homework2/Base64Conversion.hpp
index 3a87f70..9559467 100644
--- a/CST 126/Homework2/Base64Conversion.hpp
+++ b/CST 126/Homework2/Base64Conversion.hpp
@@ -1,7 +1,61 @@
#ifndef BASE64_CONVERSION_HPP
#define BASE64_CONVERSION_HPP
#include "Base64Helper.hpp"
+#include <bitset>
+#include <vector>
+char CharacterMapArray[] = { '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',
+ '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',
+ '0', '1', '2', '3','4', '5', '6', '7','8', '9', '/', '+'};
+inline char* Base64Encode(char* buffer, const size_t& size)
+{
+ size_t firstvalue, secondvalue, thirdvalue, fourthvalue = 0;
+
+ char* TempBuff = new char[size];
+
+
+ for (auto i = 0; i < size; i+=3)
+ {
+
+ firstvalue = buffer[i] & 0x3f;
+ secondvalue = ((buffer[i] >> 6) ^ (buffer[i + 1] << 2));
+ secondvalue &= 0x3f;
+
+ thirdvalue = ((buffer[i + 1] >> 4) ^ (buffer[i + 2] << 4));
+ thirdvalue &= 0x3f;
+ fourthvalue = (buffer[i + 2] >> 2);
+ fourthvalue &= 0x3f;
+
+
+
+
+ TempBuff[i] = CharacterMapArray[firstvalue];
+ TempBuff[i + 1] = CharacterMapArray[secondvalue];
+ TempBuff[i + 2] = CharacterMapArray[thirdvalue];
+ TempBuff[i + 3] = CharacterMapArray[fourthvalue];
+ }
+ delete[] buffer;
+ buffer = nullptr;
+
+ buffer = new char[size];
+ for (auto i = 0; i < size; i++)
+ {
+ buffer[i] = TempBuff[i];
+ }
+
+
+
+ //load the bytes into a block
+ //then and by 0x3f
+ //shift left by 6
+ //then again
+
+ return buffer;
+
+}
+
#endif \ No newline at end of file
diff --git a/CST 126/Homework2/Base64Helper.hpp b/CST 126/Homework2/Base64Helper.hpp
index d3e9a5f..df04dbf 100644
--- a/CST 126/Homework2/Base64Helper.hpp
+++ b/CST 126/Homework2/Base64Helper.hpp
@@ -3,32 +3,62 @@
#include <fstream>
#include <iostream>
+
+inline const size_t& SizeOfFile(const char* fileName)
+{
+ std::fstream MyFile(fileName, std::ios::in | std::ios::binary | std::ios::ate);
+ std::streampos Sizer;
+
+ if (MyFile.is_open())
+ {
+ Sizer = MyFile.tellg();
+ const size_t size = Sizer;
+ MyFile.close();
+
+ return size;
+ }
+ else
+ {
+ std::cerr << "Unable to open file: " << fileName;
+ return 0;
+ }
+}
+
+
inline char* ReadTextFromFile(const char* fileName, char* buffer)
{
+ std::ifstream File(fileName);
+
+ if (!File.is_open())
+ {
+ std::cerr << "Unable to open file for reading: " << fileName;
+ }
+
+ File >> buffer;
+ File.close();
+
+
return buffer;
}
-inline char* ReadFileAsBinary(const char* fileName, char* buffer)
+inline char* ReadFileAsBinary(const char* fileName, char* buffer, const size_t& size)
{
try
{
//open fstream in input mode, with binary mode
- std::fstream File(fileName, std::ios::in | std::ios::binary);
+ std::fstream File(fileName,std::ios::in| std::ios::binary);
- if (File.fail())
+ if (!File.is_open())
{
std::cerr << "Could not open file for binary input: " << fileName;
return buffer;
}
- File.seekg(0, std::ios::end);
- std::streamsize size = File.tellg();
- File.seekg(0, std::ios::beg);
+
delete[] buffer;
buffer = nullptr;
-
buffer = new char[size];
File.read(buffer, size);
File.close();
@@ -39,17 +69,58 @@ inline char* ReadFileAsBinary(const char* fileName, char* buffer)
std::cerr << "Exception during binary file input. " << fileName
<< " was not successfully streamed to binary. " <<
ex.what();
- return buffer;
+ return nullptr;
}
}
-inline bool WriteFileFromBinary(const char* fileName, const char* buffer)
+inline bool WriteFileFromBinary(const size_t& size, const char* fileName, const char* buffer)
{
+ try
+ {
+
+ std::fstream File(fileName, std::ios::binary | std::ios::out);
+
+ if (!File.is_open())
+ {
+ std::cerr << "Could not open file for binary output: " << fileName;
+ }
+
+
+ File.write(buffer, size);
+ File.close();
+
+ /*delete[] buffer;
+ buffer = nullptr;*/
+
+
+ return buffer;
+ }
+ catch (const std::exception& ex)
+ {
+ std::cerr << "Exception during binary file input. " << fileName
+ << " was not successfully streamed to binary. " <<
+ ex.what();
+ }
+
+
return false;
}
inline bool WriteTextToFile(const char* fileName, const char* fileContents)
{
+ std::ofstream File(fileName);
+
+
+ if (!File.is_open())
+ {
+ std::cerr << "Unable to open the file: " << fileName << std::endl;
+ return false;
+ }
+ File << fileContents;
+
+ File.close();
+
+
return false;
}
diff --git a/CST 126/Homework2/FindingPi.exe b/CST 126/Homework2/FindingPi.exe
new file mode 100644
index 0000000..b497cc9
--- /dev/null
+++ b/CST 126/Homework2/FindingPi.exe
@@ -0,0 +1 @@
+QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ \ No newline at end of file
diff --git a/CST 126/Homework2/Homework2.vcxproj b/CST 126/Homework2/Homework2.vcxproj
index 978f773..0618b39 100644
--- a/CST 126/Homework2/Homework2.vcxproj
+++ b/CST 126/Homework2/Homework2.vcxproj
@@ -135,6 +135,7 @@
</ItemGroup>
<ItemGroup>
<Text Include="destination_file.txt" />
+ <Text Include="randomtext.txt" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\..\..\Downloads\FindingPi.exe" />
diff --git a/CST 126/Homework2/Homework2.vcxproj.filters b/CST 126/Homework2/Homework2.vcxproj.filters
index 22989db..6bf0ece 100644
--- a/CST 126/Homework2/Homework2.vcxproj.filters
+++ b/CST 126/Homework2/Homework2.vcxproj.filters
@@ -29,6 +29,7 @@
</ItemGroup>
<ItemGroup>
<Text Include="destination_file.txt" />
+ <Text Include="randomtext.txt" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\..\..\Downloads\FindingPi.exe">
diff --git a/CST 126/Homework2/destination_file.txt b/CST 126/Homework2/destination_file.txt
index e69de29..60ea7d7 100644
--- a/CST 126/Homework2/destination_file.txt
+++ b/CST 126/Homework2/destination_file.txt
@@ -0,0 +1 @@
+0VG0BCvBClNHg8W0Bip5WylHmlGlBi1520l2uNXKM3tVGt9mlByvJHzBSuRGzRXmZWKM3tVGt9mlByvJHzBivJH0V20lmnF \ No newline at end of file
diff --git a/CST 126/Homework2/main.cpp b/CST 126/Homework2/main.cpp
index c434ba9..82a2d32 100644
--- a/CST 126/Homework2/main.cpp
+++ b/CST 126/Homework2/main.cpp
@@ -10,15 +10,29 @@ bool Worker(char** argv);
int main(const int argc, char* argv[])
{
- if (argc == ARG_COUNT)
- {
- //run commandline version
- Worker(argv);
- }
- else
- {
- //run other version!
- }
+ char* buffer = nullptr;
+ char* MyEncodedCharArray = nullptr;
+ bool success = false;
+ const size_t size = SizeOfFile("randomtext.txt");
+ buffer = new char[1];
+
+ buffer = ReadFileAsBinary("randomtext.txt", buffer, size);
+
+ MyEncodedCharArray = Base64Encode(buffer, size);
+
+ success = WriteFileFromBinary(size, "destination_file.txt", buffer);
+ delete[] buffer;
+
+ //if (argc == ARG_COUNT)
+ //{
+ // Worker(argv);
+ //}
+ //else
+ //{
+ // //run other version!
+ //}
+
+
return Worker(); //can be used to trigger error controls
@@ -59,20 +73,27 @@ bool Worker(char** argv)
const char* arg1 = argv[1];//-e or -d
const char* arg2 = argv[2];
const char* arg3 = argv[3];
-
-
+ char* buffer = nullptr;
+ bool success = false;
+ char* MyEncodedCharArray = nullptr;
+ const size_t size = SizeOfFile(arg2);
const char option = arg1[1];
switch (option)
{
case 'e':
//filereading binary
- char* buffer = new char[1];
- buffer = ReadFileAsBinary(arg2, buffer);
- //encoding
- //file writing text
- delete[] buffer;
- return true;
+ buffer = new char[size];
+
+ buffer = ReadFileAsBinary(arg2, buffer, size);
+
+ MyEncodedCharArray = Base64Encode(buffer, size);
+
+ success = WriteFileFromBinary(size, arg3, buffer);
+ delete[] buffer;
+
+
+ return success;
case 'd':
//file readingtext
//decoding work
diff --git a/CST 126/Homework2/randomtext.txt b/CST 126/Homework2/randomtext.txt
new file mode 100644
index 0000000..1efd69c
--- /dev/null
+++ b/CST 126/Homework2/randomtext.txt
@@ -0,0 +1,3 @@
+text to test out binary file functions
+some more words and stuff
+some more words for testing! \ No newline at end of file