public static function unpackI64($hi, $low)
    {
        // Packing is:
        // OrientDBHelpers::hexDump(pack('NN', $int >> 32, $int & 0xFFFFFFFF));

        // If x64 system, just shift hi bytes to the left, add low bytes. Piece of cake.
        if (PHP_INT_SIZE === 8) {
            return ($hi << 32) + $low;
        }

        // x32
        // Check if long could fit into int
        $hiComplement = self::convertComplementInt($hi);
        if ($hiComplement === 0) {
            // Hi part is 0, low will fit in x32 int
            return $low;
        } elseif ($hiComplement === -1) {
            // Hi part is negative, so we just can convert low part
            if ($low >= 0x80000000) {
                // Check if low part is lesser than minimum 32 bit signed integer
                return self::convertComplementInt($low);
            }
        }

        // x32 string with bc_match
        // Check if module is available
        if (!extension_loaded('bcmath')) {
            throw new OrientDBException('Required bcmath module to continue');
        }

        // Sign char
        $sign = '';
        $lastBit = 0;
        // This is negative number
        if ($hiComplement < 0) {
            $hi = ~$hi;
            $low = ~$low;
            $lastBit = 1;
            $sign = '-';
        }

        // Format bytes properly
        $hi = sprintf('%u', $hi);
        $low = sprintf('%u', $low);

        // Do math
        $temp = bcmul($hi, '4294967296');
        $temp = bcadd($low, $temp);
        $temp = bcadd($temp, $lastBit);
        return $sign . $temp;
    }
public static function unpackI64($hi, $low)
    {
        // Packing is:
        // OrientDBHelpers::hexDump(pack('NN', $int >> 32, $int & 0xFFFFFFFF));

        // If x64 system, just shift hi bytes to the left, add low bytes. Piece of cake.
        if (PHP_INT_SIZE === 8) {
            return ($hi << 32) + $low;
        }

        // x32
        // Check if long could fit into int
        $hiComplement = self::convertComplementInt($hi);
        if ($hiComplement === 0) {
            // Hi part is 0, low will fit in x32 int
            return $low;
        } elseif ($hiComplement === -1) {
            // Hi part is negative, so we just can convert low part
            if ($low >= 0x80000000) {
                // Check if low part is lesser than minimum 32 bit signed integer
                return self::convertComplementInt($low);
            }
        }

        // x32 string with bc_match
        // Check if module is available
        if (!extension_loaded('bcmath')) {
            throw new OrientDBException('Required bcmath module to continue');
        }

        // Sign char
        $sign = '';
        $lastBit = 0;
        // This is negative number
        if ($hiComplement < 0) {
            $hi = ~$hi;
            $low = ~$low;
            $lastBit = 1;
            $sign = '-';
        }

        // Format bytes properly
        $hi = sprintf('%u', $hi);
        $low = sprintf('%u', $low);

        // Do math
        $temp = bcmul($hi, '4294967296');
        $temp = bcadd($low, $temp);
        $temp = bcadd($temp, $lastBit);
        return $sign . $temp;
    }
public static function unpackI64 ( $ hi , $ low ) { // Packing is: // OrientDBHelpers::hexDump(pack('NN', $int >> 32, $int & 0xFFFFFFFF)); // If x64 system, just shift hi bytes to the left, add low bytes. Piece of cake. if ( PHP_INT_SIZE === 8 ) { return ( $ hi << 32 ) + $ low ; } // x32 // Check if long could fit into int $ hiComplement = self :: convertComplementInt ( $ hi ) ; if ( $ hiComplement === 0 ) { // Hi part is 0, low will fit in x32 int return $ low ; } elseif ( $ hiComplement === - 1 ) { // Hi part is negative, so we just can convert low part if ( $ low >= 0x80000000 ) { // Check if low part is lesser than minimum 32 bit signed integer return self :: convertComplementInt ( $ low ) ; } } // x32 string with bc_match // Check if module is available if ( ! extension_loaded ( 'bcmath' ) ) { throw new OrientDBException ( 'Required bcmath module to continue' ) ; } // Sign char $ sign = '' ; $ lastBit = 0 ; // This is negative number if ( $ hiComplement < 0 ) { $ hi = ~ $ hi ; $ low = ~ $ low ; $ lastBit = 1 ; $ sign = '-' ; } // Format bytes properly $ hi = sprintf ( '%u' , $ hi ) ; $ low = sprintf ( '%u' , $ low ) ; // Do math $ temp = bcmul ( $ hi , '4294967296' ) ; $ temp = bcadd ( $ low , $ temp ) ; $ temp = bcadd ( $ temp , $ lastBit ) ; return $ sign . $ temp ; }
Unpacks 64 bits signed long
@static
@param $hi int Hi bytes of long
@param $low int Low bytes of long
@throws OrientDBException
@return int|string
Unpacks 64 bits signed long