BC prend-il en charge les calculs hexadécimaux?

20

J'essaie de faire un hexcalcul directement avec bc, j'ai déjà spécifié l'échelle.

echo 'scale=16;c06b1000-c06a5e78' | bc

Mais je reçois toujours un zéro. Qu'est-ce qui ne va pas?

Marguerite
la source
Bien que ce ne soit pas techniquement une réponse à votre question, vous voudrez peut-être envisager moo (1) au lieu de bc (1).

Réponses:

33
echo 'ibase=16;C06D1000-C06A5E78' | bc
176520

Notez que seuls les chiffres hexadécimaux UPPER CASE sont pris en charge, car les minuscules entreraient en conflit avec les noms de fonction et de variable, c'est pourquoi vous avez obtenu 0 dans votre exemple ( var1 - var2)

Si vous avez également besoin de la réponse en hexadécimal, définissez simplement la obasevariable:

echo 'obase=16;ibase=16;C06D1000-C06A5E78' | bc
2B188

PS: FYI scalen'est pas conçu pour la base de conversion. De man bc:

scale defines how some operations use digits after the decimal point.
The default value of scale is 0.
se ruer
la source
Donc, la vraie réponse sur «ce qui pourrait être faux» est que bc ne prend en charge UPPER CASE que pour les chiffres hexadécimaux, avec des crédits à l'éditeur Stéphane.
Roland
Notez qu'il est important de définir obaseavant de définir ibase. Si vous définissez d' ibaseabord, cela affecte également la valeur analysée obase. ie ibase = 16; obase = 16;définit obaseà 0x16 = 22
Arnavion