Conversor de notação numérica de iRules

Digite um valor como ele aparece num iRule (010, 0x1F, 08, 1e3) e veja como o Tcl 8.4 o lê: inteiro ou double, a base, o mesmo valor em outras notações, e por que 010 == 8 é verdadeiro enquanto 010 eq 8 é falso. Local, sem rede.

Redes
Experimente

Inteiro escrito em octal

O Tcl o imprime como 8

  • Um 0 inicial faz o Tcl ler os dígitos em octal (base 8): 010 vale 8 em decimal.
  • Esta é a surpresa clássica dos iRules: um valor com cara de decimal, como um código ou um horário com zero à esquerda, é octal por causa do 0 inicial.

O mesmo inteiro em outras notações

NotaçãoDígitosComo escrever num iRule
Decimal88
Hexadecimal80x8
Octal10010
Binário1000O Tcl 8.4 não tem notação binária

Dois lugares onde o Tcl lê números

Escrito na própria expressão

expr {010}

8

Um literal é lido quando a expressão é compilada, então um literal ruim (como 08) para a expressão inteira antes que qualquer parte dela rode.

Guardado numa variável

set x 010
expr {$x + 0}

8

Um valor só é lido quando um operador precisa de um número. Se não puder ser lido, a aritmética falha nesse ponto, e as comparações passam a comparar texto sem avisar.

Comparando com 8

ExpressãoResultadoPor quê
expr {$x == $y}1Numérica quando os dois lados são lidos como números; senão, compara o texto.
expr {$x eq $y}0eq sempre compara o texto.
expr {$x < $y}0Numérica quando os dois lados são lidos como números; senão, compara o texto.
expr {$x > $y}0Numérica quando os dois lados são lidos como números; senão, compara o texto.

Nestas expressões $x contém 010 e $y contém 8, os dois definidos como valores simples.

Endpoint da APIGEThttps://ronutz.com/api/v1/f5-irules-number-notationDocumentado, não servido. Abre a especificação.

Referências

Aparece nestes fluxos de trabalho