PHP

2011-09-25 12 views
6

में एंडियननेस बदलना तो मैं VPK फ़ाइल प्रारूप को पार्स करने के लिए PHP में एक कक्षा बना रहा हूं।PHP

हालांकि मैं एक समस्या पर पहुंच जाते हैं:

object(VPKHeader)#2 (3) { 
    ["Signature"]=> 
    string(8) "3412aa55" 
    ["Version"]=> 
    string(4) "1000" 
    ["DirectoryLength"]=> 
    int(832512) 
} 

हस्ताक्षर, 0x55aa1234 माना जाता है लेकिन हस्ताक्षर मैं पढ़ रहा हूँ 0x3412aa55 है।

मैं PHP में एंडियननेस कैसे बदलूं?

उत्तर

4

यदि आपका स मान हमेशा होगा तार हो, तो आपको निम्न फ़ंक्शन का उपयोग कर सकते हैं:

function swapEndianness($hex) { 
    return implode('', array_reverse(str_split($hex, 2))); 
} 

सहमत है, यह सबसे कारगर नहीं है, लेकिन कोड मेरी राय में काफी सुंदर है। इसके अलावा, यह सभी आकारों के साथ काम करता है।

+0

बहुत बहुत धन्यवाद! उसने ऐसा किया! मैंने हेक्स अंकों को आजमाने और डालने के लिए सूर्य के नीचे हर विधि की कोशिश की लेकिन इसका कोई फायदा नहीं हुआ। आपकी विधि पूरी तरह से काम करता है। धन्यवाद! – robingchan

2

आपको मैन्युअल रूप से मूल्य परिवर्तित करना होगा। एल्गोरिथ्म ही होगा के रूप में यह है, इस कोड सी ++ में है तो बस बंदरगाह (आप केवल एक है कि afaik int पर काम करता है की जरूरत है):

inline void endian_swap(unsigned short& x) 
{ 
    x = (x>>8) | 
     (x<<8); 
} 

// this is the one you need 
inline void endian_swap(unsigned int& x) 
{ 
    x = (x>>24) | 
     ((x<<8) & 0x00FF0000) | 
     ((x>>8) & 0x0000FF00) | 
     (x<<24); 
} 

// __int64 for MSVC, "long long" for gcc 
inline void endian_swap(unsigned __int64& x) 
{ 
    x = (x>>56) | 
     ((x<<40) & 0x00FF000000000000) | 
     ((x<<24) & 0x0000FF0000000000) | 
     ((x<<8) & 0x000000FF00000000) | 
     ((x>>8) & 0x00000000FF000000) | 
     ((x>>24) & 0x0000000000FF0000) | 
     ((x>>40) & 0x000000000000FF00) | 
     (x<<56); 
} 

स्रोत: http://www.codeguru.com/forum/showthread.php?t=292902

+0

इससे डर था: पी मैंने इसे यहां पोर्ट करने की कोशिश की: http://pastebin.com/q8LtMy29 यह सही है? – robingchan

+0

कानूनी लग रहा है। क्या यह सही आउटपुट देता है? – klaustopher

+1

ध्यान दें कि PHP हस्ताक्षरित पूर्णांक का समर्थन नहीं करता है - यह सुनिश्चित नहीं है कि इससे चीजों को कैसे प्रभावित किया जाएगा। साथ ही, आप PHP_INT_SIZE का उपयोग करके int का आकार ढूंढ सकते हैं, यह जानने के लिए कि किस स्वैप का उपयोग करना है (आपको योरहोर्ट की आवश्यकता नहीं होगी) –