2012-09-13 12 views
6

मैं इस तरह सर्वर से एक बाइनरी स्ट्रिंग लिख रहा हूँ:जावास्क्रिप्ट में हस्ताक्षरित int को कैसे पढ़ा जाए?

header('Content-type: application/octet-stream'); 
echo $data = pack('C*', 0, 10, 100, 127, 128, 200, 250, 255, 256); 

और इस तरह से lib js और jDataView साथ इसे पढ़ने:

$.get('/get', function(text) { 
    var view = new jDataView(text); 

    for (var i = 0; i < 20; i++) { 
     console.log(i, view.getUint8(i)); 
    } 
}); 

समस्या यह है कि मैं केवल मानों पढ़ सकते हैं जो कि 128 से कम हैं। Uint पढ़ने के लिए jDataView getCharCode का उपयोग करता है और यह प्रत्येक बड़े मानों के लिए 65533 देता है।

मैं जेएस में मूल्य कैसे प्राप्त करूं?

+1

सीमा से बाहर '256' नहीं है? –

+0

आपका मतलब '.charCodeAt()' है, है ना? –

+1

@ ŠimeVidas यह है, लेकिन सवाल यह नहीं है, मुझे लगता है। – raina77ow

उत्तर

1

यह इस शीर्ष लेख (और कैसे एक्सएचआर प्रतिक्रिया कार्रवाई की जानी चाहिए की फेरबदल के बिना साथ ...

header('Content-Type: text/plain; charset=x-user-defined')

बस ठीक काम करता है जब आप (PHP फ़ाइल से) भेजा हेडर बदल; this article प्रक्रिया का वर्णन विवरण में) यह text मान है जो गड़बड़ हो जाता है: सभी 'अमान्य' (> 127) वर्णों को शाब्दिक रूप से '\uFFFD' द्वारा प्रतिस्थापित किया जाएगा।

बेशक, इन पात्रों से मूल मूल्यों को निकालना संभव नहीं है, इसलिए यह मेरी राय में jDataView की एक बग नहीं है।

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