GOOGLE ADS

lunes, 18 de abril de 2022

Leer líneas de archivo CSV con contenido hexadecimal y convertirlo a decimal

Aquí está mi archivo CSV y su contenido está en hexadecimal.

a3 42 fe 9e 89 
a3 43 14 9d cd
a3 43 1e 02 82
a3 43 23 bd 85
a3 43 39 d5 83
a3 43 3e b9 8d
a3 43 3f 44 c0
a3 43 50 c9 49
a3 43 67 29 c8
a3 43 67 43 0d

Solo necesito el penúltimo valor y el código para extraer ese valor es este.

void getvalues(){
std::ifstream data("mydata1.CSV");
int row_count =0;
std::string line;
while(std::getline(data,line))
{
row_count +=1;
std::stringstream lineStream(line);
std::string cell;
int column_count = 0;
while(std::getline(lineStream,cell,' '))
{
column_count+=1;
if ( column_count == 5){
std::cout << std::dec<< cell[0]<< std::endl;
}
}
}

Como estoy leyendo las líneas en una cadena cell, no puedo hacer ninguna conversión. Al principio intenté envolver el cellcon un intpero me devuelve el valor ASCII del carácter que es bastante obvio y no debería haberlo hecho.


Solución del problema

Si desea convertir una cadena en un número entero, puede usar std::stoi, que se incluye en el paquete de cadenas. De forma predeterminada, puede usar stoi como tal:

int num = std::stoi(cell)

Sin embargo, dado que queremos analizar un número hexadecimal base 16, debemos usarlo como:

int num = std::stoi(cell, 0, 16)

Artículo rápido sobre esto: https://www.includehelp.com/stl/convert-hex-string-to-integer-using-stoi-function-in-cpp-stl.aspx

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...