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