#include <iostream> #include <fstream> #include <string> #include <vector>
#define _PI 3.14159265358979 #define _HALF_PI 1.57079632679490 #define _QUARTER_PI 0.78539816339745 #define _TWAIN_PI 6.28318530717958 #define _E 2.71828182845905 #define _LOG2E 1.44269504088896 #define _LOG10E 0.43429448190325 #define _LN2 0.69314718055995 #define _LN10 2.30258509299405 #define _SQRT_2 1.41421356237310 #define _SQRT_1_2 0.70710678118655
int main() { std::string String = "Strings"; std::vector<double> Vector1D(10, _PI); std::vector<std::vector<double>> Vector2D{ {_HALF_PI, _QUARTER_PI}, {_TWAIN_PI, _E}, {_LOG2E, _LOG10E}, {_LN2, _LN10}, {_SQRT_2, _SQRT_1_2}, {_LOG2E, _LOG10E}, {_LN2, _LN10}, {_SQRT_2, _SQRT_1_2} };
std::ofstream ofstream("test.bin", std::ios::out | std::ios::binary);
std::streamsize outStringSize = String.size(); ofstream.write(reinterpret_cast<const char *>(&outStringSize), sizeof(std::streamsize)); ofstream.write(String.c_str(), std::streamsize(outStringSize * sizeof(char)));
std::streamsize outVector1DSize = Vector1D.size(); ofstream.write(reinterpret_cast<const char *>(&outVector1DSize), sizeof(std::streamsize)); ofstream.write(reinterpret_cast<const char *>(&Vector1D[0]), Vector1D.size() * sizeof(double));
std::streamsize outVector2DSize = Vector2D.size(); ofstream.write(reinterpret_cast<const char *>(&outVector2DSize), sizeof(std::streamsize)); for (auto &item: Vector2D) { std::streamsize size = item.size(); ofstream.write(reinterpret_cast<const char *>(&size), sizeof(std::streamsize)); ofstream.write(reinterpret_cast<const char *>(&item[0]), item.size() * sizeof(double)); }
ofstream.close();
std::ifstream ifstream("test.bin", std::ios::in | std::ios::binary);
std::streamsize inStringSize; ifstream.read(reinterpret_cast<char *>(&inStringSize), sizeof(std::streamsize));
std::vector<char> temp(inStringSize); ifstream.read(reinterpret_cast<char *>(&temp[0]), std::streamsize(inStringSize * sizeof(char))); std::string inString(temp.begin(), temp.end());
std::streamsize inVector1DSize; ifstream.read(reinterpret_cast<char *>(&inVector1DSize), sizeof(std::streamsize)); std::vector<double> inVector1D(inVector1DSize); ifstream.read(reinterpret_cast<char *>(&inVector1D[0]), std::streamsize(inVector1DSize * sizeof(double)));
std::streamsize inVector2DSize; ifstream.read(reinterpret_cast<char *>(&inVector2DSize), sizeof(std::streamsize));
std::vector<std::vector<double>> inVector2D; for (std::streamsize n = 0; n < inVector2DSize; ++n) { std::streamsize inVector2DInnerSize = 0; ifstream.read(reinterpret_cast<char *>(&inVector2DInnerSize), sizeof(std::streamsize));
inVector2D.resize(inVector2DSize, std::vector<double>(inVector2DInnerSize));
ifstream.read(reinterpret_cast<char *>(&inVector2D[n][0]), std::streamsize(inVector2DInnerSize * sizeof(double))); }
ifstream.close();
if (String == inString) std::cout << "String OK" << std::endl; else std::cout << __LINE__ << " ERROR" << std::endl;
if (Vector1D.size() == inVector1D.size()) std::cout << "Vector1D Size OK, " << Vector1D.size() << " = " << inVector1D.size() << std::endl; else std::cout << __LINE__ << "ERROR" << std::endl;
for (int i = 0; i < Vector1D.size(); ++i) { if (Vector1D[i] == inVector1D[i]) std::cout << "Vector1D " << i << " OK, " << Vector1D[i] << " = " << inVector1D[i] << std::endl; else std::cout << __LINE__ << "ERROR" << std::endl; }
for (int i = 0; i < Vector2D.size(); ++i) { for (int j = 0; j < Vector2D[0].size(); ++j) { if (Vector2D[i][j] == inVector2D[i][j]) std::cout << "Vector2D " << i << j << " OK, " << Vector2D[i][j] << " = " << inVector2D[i][j] << std::endl; else std::cout << __LINE__ << "ERROR" << std::endl; } } return 0; }
|