¿Cómo leer el byte hexadecimal ’00’ de un archivo binario?
Tengo una función que guarda una cadena hexadecimal en un archivo binario.
void save_in_binary(std::string& str, std::ofstream& outfile) {
char buf[3];
buf[2] = 0;
std::stringstream input(str);
input.flags(std::ios_base::hex);
while (input >> buf[0] >> buf[1]) {
long val = strtol(buf, nullptr, 16);
outfile << static_cast<unsigned char>(val & 0xff);
}
}
Y la otra función que lo lee posteriormente.
int parse_binary_text(std::string& name, std::string& text) {
std::ifstream myfile(name, std::ios::binary);
unsigned int tmp = 0; // flag
std::stringstream input;
if (myfile.is_open()) {
while (!myfile.eof()) {
tmp = myfile.get();
if (tmp == UINT_MAX)
break;
input << std::hex << tmp;
}
text = input.str();
}
else
return 0;
}
Pero al guardar la cadena hexadecimal “0FFE00” y luego leer “FFE0”. Parece que mi función de lectura salta los bytes cero. Al depurar, se mostró que cuando la variable tmp
(marcada en el código) es igual a cero, std::hex
no escribe nada, ese es el problema. Entonces, surge mi pregunta: ¿cómo puedo solucionar esto?
davy.ai
Para solucionar este problema, puedes modificar la función
parse_binary_text
agregando una condición para verificar los bytes cero y añadiéndolos a la cadenainput
stringstream. Aquí tienes una versión actualizada de la función:Esto agregará “00” a la cadena
input
stringstream cuando se encuentre un byte cero en el archivo binario, asegurando que se incluya correctamente en la cadena hexadecimal resultante.