2012-06-26 44 views
5

Tôi có tệp hình ảnh thô được lưu trong dữ liệu nhị phân (không mã hóa). Tôi muốn đọc trong tập tin và đúc các giá trị cho một unsigned char. Nhưng tôi không chắc chắn làm thế nào để bắt đầu đi về việc này. Mỗi tệp chứa 640x480 byte. Mỗi pixel là 8 bit.Cách đọc dữ liệu nhị phân và truyền sang ký tự chưa được ký (C++)

Tôi đã sử dụng trang trợ giúp C++ tại đây: http://www.cplusplus.com/doc/tutorial/files/, tuy nhiên khi tôi đang couting dữ liệu, có vẻ như đang hiển thị cùng một ký tự nhị phân/không phải con người có thể đọc được. Ai đó có thể xin tư vấn? Đây là mã của tôi cho đến nay:

#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; 
} 

Dưới đây là ảnh chụp mẫu của các đầu ra:

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 

Trả lời

8
unsigned char* memblock; // change declaration of memblock 

... 

memblock = new unsigned char[size]; // change to unsigned char 
file.seekg (0, ios::beg); 
file.read ((char*)memblock, size); // cast to a char* to give to file.read 

Để in các giá trị số thay vì nhân vật, diễn viên đến một int trước khi in.

(int) memblock[l] 
+0

Hmm, MathWizz, thay vào đó cho tôi int. Tôi muốn chuyển đổi nó thành một unsigned char (0 đến 255). Không có cách nào để làm điều đó? Tôi có cần phải chuyển đổi nó thành một int không? – c0d3rz

+0

Đầu ra mong đợi là gì? Bạn chỉ đang truyền để in một giá trị số? – trumank

+0

Không, tôi muốn xử lý các ký tự chưa ký. Tôi nhận được hình ảnh thô được lưu dưới dạng nhị phân. Tôi chỉ không thể quấn đầu xung quanh đối phó với định dạng không thể đọc được, vì vậy tôi muốn làm việc với các ký tự không dấu chỉ để tôi có thể thấy những gì đang xảy ra. Bây giờ tôi chỉ đang đúc để gỡ lỗi. Nhưng tôi muốn memblock về cơ bản chuyển đổi tất cả các giá trị đó thành ký tự chưa ký thay vì ... – c0d3rz

Các vấn đề liên quan