PHP entity change

So, I am creating a class in PHP to analyze the VPK format.

However, I ran into a problem:

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

The signature should be 0x55aa1234, however the signature I am reading is 0x3412aa55.

How to switch endianness in PHP?

+6
source share
2 answers

If your hexadecimal values ​​are always strings, you can use the following function:

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

Agreed, this is not the most efficient, but the code is pretty elegant, in my opinion. In addition, it works with all sizes of numbers.

+4
source

You need to convert the value manually. The algorithm will be the same as in C ++, so just port this code (you only need one that works on int afaik):

 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); } 

Source: http://www.codeguru.com/forum/showthread.php?t=292902

+2
source

Source: https://habr.com/ru/post/898015/


All Articles