पर डाला जाए मेरे पास एक कच्ची छवि फ़ाइल है जो बाइनरी डेटा (कोई एन्कोडिंग) में सहेजी गई है। मैं फ़ाइल में पढ़ना चाहता हूं और मानों को एक हस्ताक्षरित चार में डालना चाहता हूं। लेकिन मुझे यकीन नहीं है कि ऐसा करने के बारे में कैसे जाना शुरू करें। प्रत्येक फ़ाइल में 640x480 बाइट्स होते हैं। प्रत्येक पिक्सेल 8 बिट है।द्विआधारी डेटा में कैसे पढ़ा जाए और हस्ताक्षरित चार (सी ++)
मैंने यहां सी ++ सहायता पृष्ठ का उपयोग किया है: http://www.cplusplus.com/doc/tutorial/files/, हालांकि जब मैं डेटा को couting कर रहा हूं, ऐसा लगता है कि यह वही बाइनरी/गैर-मानव पठनीय पात्र दिखा रहा है। क्या कोई सलाह दे सकता है?
#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;
}
यहाँ उत्पादन का एक नमूना पर कब्जा कर रहा है:
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
हम्म, मैथविज़, जो मुझे इसके बजाय एक int देता है। मैं इसे एक हस्ताक्षरित चार (0 से 255) में परिवर्तित करना चाहता हूं। क्या ऐसा करने का कोई तरीका नहीं है? क्या मुझे इसे केवल एक int में बदलने की ज़रूरत है? – c0d3rz
अपेक्षित आउटपुट क्या है? क्या आप केवल एक संख्यात्मक मूल्य मुद्रित करने के लिए कास्टिंग कर रहे हैं? – trumank
नहीं, मैं हस्ताक्षरित वर्णों से निपटना चाहता हूं। मुझे कच्ची छवियां मिलती हैं जो बाइनरी में सहेजी जाती हैं। मैं अपने सिर को उस गैर-पठनीय प्रारूप से निपटने के लिए लपेट नहीं सकता, इसलिए मैं बिना हस्ताक्षर किए गए वर्णों के साथ काम करना चाहता हूं ताकि मैं देख सकूं कि क्या हो रहा है। मैं केवल अभी के लिए डीबगिंग के लिए कास्टिंग था। लेकिन मैं अनिवार्य रूप से उन सभी मानों को बिना हस्ताक्षरित वर्णों में परिवर्तित करना चाहता हूं ... – c0d3rz