आप शायद अपरिभाषित व्यवहार का एक सौम्य रूप हो रही है क्योंकि %x
संशोधक unsigned int
पैरामीटर की उम्मीद है और जब एक के लिए पारित एक char
आम तौर पर एक int
करने के लिए प्रोत्साहित किया जाएगा समारोह varargs।
आप स्पष्ट रूप से उम्मीद के मुताबिक परिणाम प्राप्त करने के लिए एक unsigned int
को चार डाली चाहिए:
printf(" 0x%1x ", (unsigned)pixel_data[0]);
नोट एक क्षेत्र चौड़ाई है कि एक के बहुत उपयोगी नहीं है। यह केवल प्रदर्शित करने के लिए अंकों की न्यूनतम संख्या निर्दिष्ट करता है और किसी भी मामले में कम से कम एक अंक की आवश्यकता होगी।
तो char
अपने मंच पर तो हस्ताक्षरित किया गया है इस रूपांतरण बड़े unsigned int
मान (उदा fffffff5
) के लिए नकारात्मक char
मान परिवर्तित कर देंगे। आप pixel_data
के लिए unsigned char
का उपयोग आप अहस्ताक्षरित मूल्यों के रूप में बाइट मूल्यों का इलाज करना चाहते हैं और सिर्फ विस्तार जब unsigned int
को बदलने शून्य हैं चाहिए, या unsigned char
के माध्यम से डाली या पदोन्नति के बाद एक मास्किंग आपरेशन का उपयोग करें।
उदा।
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
या
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
स्रोत
2010-08-24 11:29:25
भी देखें: http://stackoverflow.com/questions/3512749/memcpy-adds-ff-ff-ff-to-the-beginning-of-a-byte –