Ho un file immagine raw che viene salvato in dati binari (nessuna codifica). Voglio leggere nel file e trasmettere i valori a un carattere non firmato. Ma non sono sicuro di come iniziare a fare questo. Ogni file contiene 640x480 byte. Ogni pixel è 8 bit.Come leggere i dati binari e il cast in unsigned char (C++)
Ho usato la pagina di aiuto C++ qui: http://www.cplusplus.com/doc/tutorial/files/, tuttavia quando sto couting i dati, sembra che stia mostrando gli stessi caratteri binari/non umani leggibili. Qualcuno può consigliare? Ecco il mio codice finora:
#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;
}
Qui è una cattura esempio dell'output:
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, che mi dà invece un int. Voglio convertirlo in un carattere senza segno (da 0 a 255). Non c'è modo di farlo? Devo convertirlo in un solo int? – c0d3rz
Qual è l'uscita prevista? Stai solo lanciando per stampare un valore numerico? – trumank
No, voglio occuparmi di caratteri non firmati. Ottengo immagini non elaborate che vengono salvate in binario. Non riesco a spiegarmi come gestire questo formato non leggibile, quindi voglio lavorare con caratteri non firmati solo per vedere cosa sta succedendo. Per il momento stavo solo eseguendo il debugging. Ma voglio che il memblock converta essenzialmente tutti quei valori in caratteri non firmati ... – c0d3rz