56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
#include <cstdint>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <string>
|
|
#include <cstdlib>
|
|
|
|
void writeBinaryFile(const std::string& inputFileName, const std::string& outputFileName) {
|
|
std::ifstream inputFile(inputFileName);
|
|
std::ofstream outputFile(outputFileName, std::ios::binary);
|
|
|
|
if (!inputFile) {
|
|
std::cerr << "Error opening input file: " << inputFileName << std::endl;
|
|
std::exit(EXIT_FAILURE);
|
|
}
|
|
|
|
if (!outputFile) {
|
|
std::cerr << "Error opening output file: " << outputFileName << std::endl;
|
|
std::exit(EXIT_FAILURE);
|
|
}
|
|
|
|
std::string line;
|
|
while (std::getline(inputFile, line)) {
|
|
// Get the size of the string
|
|
std::size_t size = line.size();
|
|
|
|
// Write size as 2 bytes (big-endian)
|
|
uint16_t sizeInBytes = static_cast<uint16_t>(size);
|
|
outputFile.write(reinterpret_cast<const char*>(&sizeInBytes), sizeof(sizeInBytes));
|
|
|
|
// Write the string followed by a null terminator
|
|
outputFile.write(line.c_str(), size);
|
|
|
|
// char nullChar = '\0';
|
|
// outputFile.write(&nullChar, sizeof(nullChar));
|
|
}
|
|
|
|
inputFile.close();
|
|
outputFile.close();
|
|
}
|
|
|
|
int main(int argc, char* argv[]) {
|
|
if (argc != 3) {
|
|
std::cerr << "Usage: " << argv[0] << " <input_file> <output_file>" << std::endl;
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
std::string inputFileName = argv[1]; // Input file name from args
|
|
std::string outputFileName = argv[2]; // Output binary file name from args
|
|
|
|
writeBinaryFile(inputFileName, outputFileName);
|
|
|
|
std::cout << "Strings written to binary file successfully." << std::endl;
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|