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.
RedesExperimente
Inteiro escrito em octal
O Tcl o imprime como 8
- Um 0 inicial faz o Tcl ler os dígitos em octal (base 8):
010vale 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ção | Dígitos | Como escrever num iRule |
|---|---|---|
| Decimal | 8 | 8 |
| Hexadecimal | 8 | 0x8 |
| Octal | 10 | 010 |
| Binário | 1000 | O 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ão | Resultado | Por quê |
|---|---|---|
expr {$x == $y} | 1 | Numérica quando os dois lados são lidos como números; senão, compara o texto. |
expr {$x eq $y} | 0 | eq sempre compara o texto. |
expr {$x < $y} | 0 | Numérica quando os dois lados são lidos como números; senão, compara o texto. |
expr {$x > $y} | 0 | Numé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.