Поддерживает ли 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
Арнавион
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.