code: public static function HEXTODEC($x)
      {
          $x = Functions::flattenSingleValue($x);
  
          if (is_bool($x)) {
              return Functions::VALUE();
          }
          $x = (string) $x;
          if (strlen($x) > preg_match_all('/[0123456789ABCDEF]/', strtoupper($x), $out)) {
              return Functions::NAN();
          }
  
          if (strlen($x) > 10) {
              return Functions::NAN();
          }
  
          $binX = '';
          foreach (str_split($x) as $char) {
              $binX .= str_pad(base_convert($char, 16, 2), 4, '0', STR_PAD_LEFT);
          }
          if (strlen($binX) == 40 && $binX[0] == '1') {
              for ($i = 0; $i < 40; ++$i) {
                  $binX[$i] = ($binX[$i] == '1' ? '0' : '1');
              }
  
              return (bindec($binX) + 1) * -1;
          }
  
          return bindec($binX);
      }
docs: HEXTODEC.
  
  Return a hex value as decimal.
  
  Excel Function:
  HEX2DEC(x)
  
  @category Engineering Functions
  
  @param string $x The hexadecimal number you want to convert. This number cannot
  contain more than 10 characters (40 bits). 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 not a valid hexadecimal number, HEX2DEC returns the
  #NUM! error value.
  
  @return string