2010-10-08 25 views
8

मुझे पता है कि डब्ल्यूएवी फ़ाइल प्रारूप 16-बिट नमूने के लिए हस्ताक्षरित पूर्णांक का उपयोग करता है। यह उन्हें छोटे-एंडियन क्रम में भी संग्रहीत करता है, जिसका अर्थ है कि सबसे कम 8 बिट पहले आते हैं, फिर अगला, आदि। पहले बाइट पर विशेष साइन बिट है, या सबसे महत्वपूर्ण बिट (उच्चतम मूल्य) पर विशेष साइन बिट हमेशा होता है ?लिटिल-एंडियन साइन इन इंटेगर

अर्थ:
डब्ल्यूएवी प्रारूप में साइन बिट कौन सा है?

++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++ 
|| a | b | c | d | e | f | g | h || i | j | k | l | m | n | o | p || 
++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++ 
--------------------------- here ->^------------- or here? ->^

i या p?

+1

आपकी तस्वीर के लिए, यह इस बात पर निर्भर करता है कि आप बाइट के भीतर बिट्स कैसे आकर्षित करते हैं। : पी यदि आप उन्हें एक बड़े-एंडियन (उच्च बिट पहले) की तरह आकर्षित करते हैं, तो यह "मैं" होगा। यदि आप सभी की छोटी-छोटीता को गले लगाते हैं, तो "पी"। किसी भी तरह से, यह अंतिम बाइट का उच्च हिस्सा होगा। – cHao

उत्तर

9

संकेत बिट किसी भी two's-पूरक मशीन पर सबसे महत्वपूर्ण बिट (x86) की तरह है, और इस तरह एक छोटे से endian प्रारूप में पिछले बाइट में होगा

बस कारण मैं नहीं करना चाहता था ASCII आर्ट सहित नहीं एक हो ... :)

+---------------------------------------+---------------------------------------+ 
|    first byte    |    second byte    | 
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ 
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ 
    ^--- lsb            msb/sign bit -----^ 

बिट्स मूल रूप से सबसे ज्यादा लोग उनके बारे में क्या सोचते हैं, जिसके कारण उच्च बाइट पिछले है "पीछे की ओर" प्रतिनिधित्व कर रहे हैं। लेकिन यह सब सुसंगत है; "बिट 15" "बिट 0" के बाद आता है जैसे पते को काम करना चाहिए, और अभी भी शब्द के सबसे महत्वपूर्ण बाइट का सबसे महत्वपूर्ण हिस्सा है। आपको थोड़ा सा झुकाव करने की ज़रूरत नहीं है, क्योंकि बाइट्स के मामले में हार्डवेयर सबसे कम स्तर पर बोलता है - इसलिए जब आप बाइट पढ़ते हैं, तो ऐसा लगता है कि आप अपेक्षा करते हैं। बस अपने शब्द का सबसे महत्वपूर्ण बिट देखें (या इसके आखिरी बाइट, यदि आप एक समय में बाइट पढ़ रहे हैं), और आपका साइन बिट है।

नोट, हालांकि, दोनों के पूरक बिल्कुल "बिट बिट" के रूप में एक विशेष बिट को निर्दिष्ट नहीं करते हैं। संख्याओं का प्रतिनिधित्व करने के तरीके के बारे में यह एक बहुत ही सुविधाजनक दुष्प्रभाव है। 16-बिट संख्याओं के लिए, -x 32768 + x के बजाय 65536-x के बराबर है (जो मामला होगा यदि ऊपरी बिट सख्ती से संकेत था)।

+3

यदि आप एएससीआईआई प्रतिनिधित्व के बजाए वास्तविक बाइट्स पढ़ रहे हैं, तो हाँ - निचला 8 बिट्स (और इस प्रकार, एलएसबी) हमेशा * पहले बाइट होगा, और ऊपरी 8 (एमएसबी शामिल) * हमेशा * आखिरी रहें - यही "छोटा एंडियन" है। लेकिन बाइट के भीतर बिट्स संग्रहीत हैं हालांकि हार्डवेयर उन्हें स्टोर करना चाहता है। आपको यह जानने की ज़रूरत नहीं है कि यह तब तक काम करता है जब तक आप हार्ड ड्राइव नहीं बनाते। – cHao

+0

मैं इस बारे में बात कर रहा हूं कि इसे डब्ल्यूएवी फ़ाइल प्रारूप में कैसे संग्रहीत किया जाता है, हार्डवेयर में नहीं। मैंने पढ़ा है कि नमूनों को 16-बिट पूर्णांक पर हस्ताक्षर किए गए छोटे एंडियन के रूप में संग्रहीत किया जाता है। –

+0

वे हैं। और यह x86 प्रोसेसर 16-बिट मानों को संभालने के तरीके के काफी करीब होता है, यही कारण है कि वे इस तरह से संग्रहीत होते हैं। (विंडोज़ x86- संगत CPUs के लिए बनाया गया था।) किसी भी तरह से, साइन बिट ऊपर वर्णित मूल्य के अंतिम बाइट का सबसे महत्वपूर्ण बिट है। यदि 'बाइट 2 और 0x80' nonzero है, तो आपका नंबर नकारात्मक है। – cHao

9

पूर्णांक, थोड़ा endian पर हस्ताक्षर किए:

 
byte 1(lsb)  byte 2(msb) 
--------------------------------- 
7|6|5|4|3|2|1|0 | 7|6|5|4|3|2|1|0| 
---------------------------------- 
       ^
        | 
       Sign bit 

आप केवल उस के साथ अपने आप को चिंता का विषय है जब पढ़ने/कुछ बाहरी मीडिया के लिए एक छोटी पूर्णांक लेखन की जरूरत है। आपके प्रोग्राम के भीतर, साइन बिट कम में सबसे महत्वपूर्ण बिट है, भले ही आप बड़े या छोटे एंडियन प्लेटफॉर्म पर हों।

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