code: public static function HEXTOOCT($x, $places = null)
      {
          $x = Functions::flattenSingleValue($x);
          $places = Functions::flattenSingleValue($places);
  
          if (is_bool($x)) {
              return Functions::VALUE();
          }
          $x = (string) $x;
          if (strlen($x) > preg_match_all('/[0123456789ABCDEF]/', strtoupper($x), $out)) {
              return Functions::NAN();
          }
  
          $decimal = self::HEXTODEC($x);
          if ($decimal < -536870912 || $decimal > 536870911) {
              return Functions::NAN();
          }
  
          return self::DECTOOCT($decimal, $places);
      }
docs: HEXTOOCT.
  
  Return a hex value as octal.
  
  Excel Function:
  HEX2OCT(x[,places])
  
  @category Engineering Functions
  
  @param string $x The hexadecimal number you want to convert. Number cannot
  contain more than 10 characters. The most significant bit of
  number is the sign bit. The remaining 39 bits are magnitude
  bits. Negative numbers are represented using two's-complement
  notation.
  If number is negative, HEX2OCT ignores places and returns a
  10-character octal number.
  If number is negative, it cannot be less than FFE0000000, and
  if number is positive, it cannot be greater than 1FFFFFFF.
  If number is not a valid hexadecimal number, HEX2OCT returns
  the #NUM! error value.
  If HEX2OCT requires more than places characters, it returns
  the #NUM! error value.
  @param int $places The number of characters to use. If places is omitted, HEX2OCT
  uses the minimum number of characters necessary. Places is
  useful for padding the return value with leading 0s (zeros).
  If places is not an integer, it is truncated.
  If places is nonnumeric, HEX2OCT returns the #VALUE! error
  value.
  If places is negative, HEX2OCT returns the #NUM! error value.
  
  @return string