Bc suporta cálculos hexadecimais?


20

Estou tentando fazer um hexcálculo diretamente bc, já especifiquei a escala.

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

Mas ainda recebo zero. O que pode estar errado?


Embora não seja tecnicamente uma resposta para sua pergunta, você pode considerar o moo (1) em vez de bc (1).

Respostas:


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

Observe que apenas os dígitos hexadecimais UPPER CASE são suportados, pois os minúsculos entrariam em conflito com os nomes das funções e das variáveis, e é por isso que você obteve 0 no seu exemplo ( var1 - var2)

Se você também precisar da resposta em hexadecimal, defina a obasevariável:

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

PS: A FYI scalenão foi projetada para a base de conversão. De man bc:

scale defines how some operations use digits after the decimal point.
The default value of scale is 0.

Portanto, a resposta real sobre "o que poderia estar errado" é que o bc suporta apenas o caso MAIOR para os dígitos hexadecimais, com créditos para o editor Stephane.
Roland

Observe que é importante definir obaseantes de definir ibase. Se você definir ibaseprimeiro, isso também afetará o valor analisado obase. ou seja, ibase = 16; obase = 16;define obasepara 0x16 = 22
Arnavion
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.