/**
 * Converte um valor hexadecimal para decimal com complemento de dois para numeros negativos
 * @param string $hex Valor hexadecimal
 * @return string Valor decimal na forma de string
 */
function converter_hex_dec($hex) {

    // Determinar valor do bit mais significativo
    $len = strlen($hex);
    $total_bits = ($len % 2) ? ($len + 1) * 4 : $len * 4;
    $bin = str_pad(base_convert($hex, 16, 2), $total_bits, '0', STR_PAD_LEFT);

    // Valor negativo: fazer complemento de 2
    if ($bin[0] == '1') {

        // Inverter bits
        $bin = strtr($bin, '01', '10');

        // Somar 1 de forma binaria
        for ($i = $total_bits - 1; $i >= 0; --$i) {
            if ($bin[$i] == '0') {
                $bin[$i] = '1';
                break;
            } else {
                $bin[$i] = '0';
            }
        }
        $dec = '-'.base_convert($bin, 2, 10);

    // Valor positivo: apenas converter para decimal
    } else {
        $dec = base_convert($hex, 16, 10);
    }
    return $dec;
}