तो कल काम पर, मुझे एक एएफपी फ़ाइल में पृष्ठों की गिनती करने के लिए एक आवेदन लिखना पड़ा। तो मैंने अपने एमओ: डीसीए स्पेक पीडीएफ को धूल दिया और संरचित क्षेत्र BPG (Begin Page)
और इसके 3-बाइट पहचानकर्ता को मिला। ऐप को एईक्स बॉक्स पर चलाने की जरूरत है, इसलिए मैंने इसे जावा में लिखने का फैसला किया।जावा बाइट्स को समझना
अधिकतम दक्षता के लिए, मैंने फैसला किया कि मैं प्रत्येक संरचित क्षेत्र के पहले 6 बाइट्स पढ़ूंगा और फिर क्षेत्र में शेष बाइट्स को छोड़ दूंगा। यह मैं मिलेगा:
0: Start of field byte
1-2: 2-byte length of field
3-5: 3-byte sequence identifying the type of field
तो मैं फ़ील्ड प्रकार की जाँच करें और एक पेज काउंटर बढ़ाने के अगर यह BPG
है, और मैं नहीं करता है, तो यह नहीं है। फिर मैं उनके माध्यम से पढ़ने के बजाय मैदान में शेष बाइट छोड़ देता हूं। और यहां, छोड़ने (और वास्तव में क्षेत्र की लंबाई में) जहां मैंने पाया कि जावा हस्ताक्षरित बाइट्स का उपयोग करता है।
मैंने कुछ googling किया और काफी उपयोगी जानकारी मिली। सबसे उपयोगी, निश्चित रूप से, हस्ताक्षर किए गए int मान प्राप्त करने के लिए थोड़ा सा &
0xff
करने का निर्देश था। यह मेरे लिए एक लम्बाई पाने के लिए जरूरी था जिसे बाइट्स की संख्या को छोड़ने के लिए गणना में इस्तेमाल किया जा सकता था।
अब मुझे पता है कि 128 पर, हम -128 से पीछे की ओर गिनना शुरू करते हैं। मैं क्या जानना चाहता हूं कि बिटवाई ऑपरेशन यहां कैसे काम करता है - अधिक विशेष रूप से, मैं ऋणात्मक संख्या के लिए द्विआधारी प्रतिनिधित्व पर कैसे पहुंचता हूं।
यदि मैं थोड़ा सा &
ठीक से समझता हूं, तो आपका परिणाम उस संख्या के बराबर है जहां केवल आपके दो नंबरों की सामान्य बिट सेट की गई हैं। तो byte b = -128
संभालने, हम होगा:
b & 0xff // 128
1000 0000-128
1111 1111 255
---------
1000 0000 128
तो कैसे मैं -128 के लिए 1000 0000 पर पहुंचने होगा? मैं -72 या -64 जैसी कम स्पष्ट चीज़ों का द्विआधारी प्रतिनिधित्व कैसे प्राप्त करूं?
+1 यह उल्लेख करने के लिए कि ऑपरेशन साइन एक्सटेंशन के साथ एक int में होता है। –
यह वही है जो मैं बाद में था, बहुत बहुत धन्यवाद।यही कारण है कि मैं Stackoverflow प्यार करता हूँ। –