dothack-j2me/tools/string2bin/string2bin.cpp

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;
}