Поддерживает ли bc шестнадцатеричные вычисления?

20

Я пытаюсь сделать hexрасчет непосредственно с bc, я уже указал масштаб.

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

Но я все равно получаю ноль. Что может быть не так?

маргаритка
источник
Хотя технически это не ответ на ваш вопрос, вы можете рассмотреть moo (1) вместо bc (1).

Ответы:

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

Обратите внимание, что поддерживаются только шестнадцатеричные цифры UPPER CASE, поскольку строчные буквы будут конфликтовать с именами функций и переменных, поэтому в вашем примере ( var1 - var2) вы получили 0

Если вам также нужен ответ в шестнадцатеричном виде, просто установите obaseпеременную:

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

PS: FYI scaleне предназначен для конверсии базы. От man bc:

scale defines how some operations use digits after the decimal point.
The default value of scale is 0.
порыв
источник
Таким образом, реальный ответ на вопрос «что может быть не так» заключается в том, что bc поддерживает UPPER CASE только для шестнадцатеричных цифр, с кредитами для редактора Stephane.
Роланд
Обратите внимание, что важно установить obaseперед установкой ibase. Если вы установите ibaseсначала, то это влияет на значение, проанализированное дляobase . т.е. ibase = 16; obase = 16;устанавливается obaseв 0x16 = 22
Арнавион