Conversión de tipo de datos Struct a Hex String y viceversa

La mayoría de los archivos de registro producidos en el sistema están en formato binario (0,1) o hexadecimal (0x) . A veces, es posible que necesite mapear estos datos en un formato legible. La conversión de esta información hexadecimal en tipos de datos definidos por el sistema como ‘int/string/float’ es comparativamente fácil. Por otro lado, cuando tiene algunos tipos de datos definidos por el usuario, como ‘estructura’, el proceso puede ser complicado. El siguiente programa básico lo ayudará con la operación mencionada anteriormente. Al implementar en el mundo real, necesita más manejo de errores. 

CPP

// C++ Program to convert a 'struct' in 'hex string'
// and vice versa
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
 
using namespace std;
 
struct Student_data
{
    int  student_id;
    char name[16];
};
 
void convert_to_hex_string(ostringstream &op,
                      const unsigned char* data, int size)
{
    // Format flags
    ostream::fmtflags old_flags = op.flags();
 
    // Fill characters
    char old_fill  = op.fill();
    op << hex << setfill('0');
 
    for (int i = 0; i < size; i++)
    {
        // Give space between two hex values
        if (i>0)
            op << ' ';
 
        // force output to use hex version of ascii code
        op << "0x" << setw(2) << static_cast<int>(data[i]);
    }
 
    op.flags(old_flags);
    op.fill(old_fill);
}
 
void convert_to_struct(istream& ip, unsigned char* data,
                       int size)
{
    // Get the line we want to process
    string line;
    getline(ip, line);
 
    istringstream ip_convert(line);
    ip_convert >> hex;
 
    // Read in unsigned ints, as wrote out hex version
    // of ascii code
    unsigned int u = 0;
    int i = 0;
 
    while ((ip_convert >> u) && (i < size))
        if((0x00 <= u) && (0xff >= u))
            data[i++] = static_cast<unsigned char>(u);
}
 
// Driver code
int main()
{
    Student_data student1 = {1, "Rohit"};
    ostringstream op;
 
    // Function call to convert 'struct' into 'hex string'
    convert_to_hex_string(op,
             reinterpret_cast<const unsigned char*>(&student1),
             sizeof(Student_data));
 
    string output = op.str();
    cout << "After conversion from struct to hex string:\n"
         << output << endl;
 
    // Get the hex string
    istringstream ip(output);
    Student_data student2 = {0};
 
    // Function call to convert 'hex string' to 'struct'
    convert_to_struct(ip,
                reinterpret_cast<unsigned char*>(&student2),
                sizeof(Student_data));
 
    cout << "\nAfter Conversion form hex to struct: \n";
    cout << "Id \t: " << student2.student_id << endl;
    cout << "Name \t: "<< student2.name << endl;
 
    return 0;
}

Producción:

After conversion from struct to hex string:
0x01 0x00 0x00 0x00 0x52 0x6f 0x68 0x69 0x74 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00

After Conversion form hex to struct: 
Id     : 1
Name     : Rohit

Este artículo es una contribución de Rohit Kasle . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *