Mam surowy plik obrazu, który jest zapisywany w danych binarnych (bez kodowania). Chcę przeczytać w pliku i rzucić wartości na unsigned char. Ale nie jestem pewien, jak zacząć to robić. Każdy plik zawiera 640 x 480 bajtów. Każdy piksel ma 8 bitów.Jak odczytać dane binarne i rzutować na niepodpisany znak (C++)
Używam strony pomocy C++ tutaj: http://www.cplusplus.com/doc/tutorial/files/, jednak gdy przeglądam dane, wydaje się, że wyświetlają one te same odczytywalne znaki binarne/inne niż ludzkie. Czy ktoś może doradzić? Oto mój kod do tej pory:
#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;
}
tutaj jest przechwytywanie próba wyjścia:
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, to daje mi int. Chcę przekonwertować go na unsigned char (od 0 do 255). Czy nie ma sposobu, aby to zrobić? Czy muszę przekonwertować go tylko na int? – c0d3rz
Jakie są oczekiwane wyniki? Czy przesyłasz tylko w celu wydrukowania wartości liczbowej? – trumank
Nie, chcę obsłużyć niepodpisane znaki. Otrzymuję surowe obrazy, które są zapisywane w formacie binarnym. Po prostu nie mogę zawinąć głowy, zajmując się tym nieczytelnym formatem, więc chcę pracować z niepodpisanymi znakami tylko po to, abym mógł zobaczyć, co się dzieje. Na razie rzucałem tylko debugowanie. Ale chcę, aby memblock zasadniczo konwertował wszystkie te wartości na niepodpisane znaki ... – c0d3rz