Tengo un archivo de imagen sin formato que se guarda en datos binarios (sin codificación). Quiero leer en el archivo y convertir los valores a un char sin signo. Pero no estoy seguro de cómo empezar a hacer esto. Cada archivo contiene 640x480 bytes. Cada píxel es de 8bits.Cómo leer datos binarios y convertirlos en caracteres sin signo (C++)
He utilizado la página de ayuda de C++ aquí: http://www.cplusplus.com/doc/tutorial/files/, sin embargo, cuando estoy couting los datos, parece mostrar los mismos caracteres binarios/no legibles por humanos. ¿Puede alguien por favor asesorar? Aquí está mi código hasta ahora:
#include <iostream>
#include <fstream>
using namespace std;
ifstream::pos_type size;
char * memblock;
int main() {
ifstream file ("imageData.raw", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
cout << "the complete file content is in memory";
for (int l=0; l<size; l++){
cout << " memblock[] is = " << (unsigned char)memblock[l] << " index was l = " << l << endl;
}
file.close();
delete[] memblock;
}
else cout << "Unable to open file";
return 0;
}
Aquí se muestra una captura de la salida:
memblock[] is = ▀ index was l = 2937
memblock[] is = E index was l = 2938
memblock[] is = τ index was l = 2939
memblock[] is = C index was l = 2940
memblock[] is = ┘ index was l = 2941
memblock[] is = B index was l = 2942
memblock[] is = ╬ index was l = 2943
memblock[] is = D index was l = 2944
memblock[] is = ┼ index was l = 2945
memblock[] is = C index was l = 2946
memblock[] is = ╝ index was l = 2947
memblock[] is = B index was l = 2948
memblock[] is = ┤ index was l = 2949
memblock[] is = B index was l = 2950
memblock[] is = ¿ index was l = 2951
memblock[] is = > index was l = 2952
memblock[] is = í index was l = 2953
memblock[] is = ; index was l = 2954
memblock[] is = £ index was l = 2955
memblock[] is = 6 index was l = 2956
memblock[] is = á index was l = 2957
memblock[] is = 4 index was l = 2958
memblock[] is = Ñ index was l = 2959
memblock[] is = 7 index was l = 2960
memblock[] is = ╡ index was l = 2961
Hmm, MathWizz, eso me da una int en su lugar. Quiero convertirlo en un carácter sin signo (0 a 255). ¿No hay forma de hacerlo? ¿Necesito convertirlo solo a int? – c0d3rz
¿Cuál es el resultado esperado? ¿Solo estás lanzando para imprimir un valor numérico? – trumank
No, quiero tratar con caracteres sin firmar. Obtengo imágenes en bruto que se guardan en binario. Simplemente no puedo entender el formato no legible, por lo que quiero trabajar con caracteres sin signo solo para poder ver lo que está sucediendo. Solo estaba buscando depuración por ahora. Pero quiero que el memblock esencialmente convierta todos esos valores a caracteres sin signo en su lugar ... – c0d3rz