2011-09-21 25 views
6

नमूना सी ++ कोड में मैं एक फाइल खोलूंगा और प्रत्येक char को हेक्सा फ़ाइल में प्रिंट करूँगा केवल 16 वर्ण हैं लेकिन क्यों प्रत्येक हेक्स मानों के बाद ffffff प्रिंट करेगा?% x का उपयोग करते हुए हेक्स मानों को प्रिंट करते समय प्रत्येक मान के बाद 'ffffff' मुद्रित क्यों होता है?

char buff[256]; 
// buff filled with fread 
for(i=0;i<16;i++) 
printf("%x",buff[i]); 

आउटपुट है:

4affffff67ffffffcdffffff 

ऐसा क्यों है?

+3

हमें पूरा कोड दिखाएं, विशेष रूप से, क्या 'buff' है और यह डेटा से कैसे भरा हुआ है। – orlp

+2

बेकन के प्यार के लिए, _PLEASE_ उन टैग्स को न जोड़ें जो आपके प्रश्न पर लागू नहीं होते हैं। आपने कहा है कि यह सी ++ कोड है (हालांकि मैं तर्क दूंगा कि यह वास्तव में सी कोड है) लेकिन आपने अन्य भाषाओं को जोड़ा ... ऐसा मत करो। –

+0

कृपया इस तरह के वैध सी कोड को लेबल करें, और केवल इसी तरह के। साइट ब्राउज़ करने वाले अन्य लोग अन्यथा सोच सकते हैं कि यह अच्छा/सामान्य/कैननिकल/आदि है। सी ++ कोड। – PlasmaHH

उत्तर

12

संपादित करें:

 
printf("%x", (int)(*(unsigned char*)(&buff[i]))); 

इस चाल करना चाहिए। मेरा पहला संस्करण गलत था, क्षमा करें। समस्या साइन बिट में है: 127 से अधिक मूल्य प्रत्येक नकारात्मक के रूप में संभाला गया था। हस्ताक्षर किए गए चार को कास्टिंग समस्या को हल करना चाहिए।

+0

आपके त्वरित उत्तर के लिए धन्यवाद। लेकिन जोड़ने के बाद (int) इसके प्रिंटिंग ffffff – Syedsma

+0

कृपया बफ चर परिभाषा दिखाएं। –

+0

चार बफ [256] = {0) – Syedsma

0
printf("%x", (unsigned int)(unsigned char)buff[i]); 

स्पष्टीकरण:

printf पहले परिवर्तित कर देंगे चार आप के लिए int करने के लिए। यदि आपका char हस्ताक्षरित है (पहला बिट 1 है) - उदा। 10000001 - फिर हस्ताक्षर एक्सटेंशन int: 11111111 11111111 11111111 10000001 में कनवर्ट करते समय मान को संरक्षित रखेगा। फिक्स इसे स्वयं पहले परिवर्तित करना है (साइन एक्सटेंशन के बिना)।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/11911005) –

+0

सच ... स्पष्टीकरण जोड़ा गया –

संबंधित मुद्दे