I'm trying to do a hex calculation directly with bc, I already specified the scale.

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

But I still get a zero. What could be wrong?

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

Note that only UPPER CASE hex digits are supported as lower case ones would conflict with function and variable names, which is why you got 0 in your example (var1 - var2)

If you need the answer in hex too, just set the obase variable:

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

PS: FYI scale isn't designed for conversion base. From man bc:

scale defines how some operations use digits after the decimal point.
The default value of scale is 0.
  • So the real answer on 'what could be wrong' is that bc only supports UPPER CASE for the hex digits, with credits to editor Stephane. – Roland Jan 10 '19 at 10:23
  • 3
    Note that it's important to set obase before you set ibase. If you set ibase first, then it affects the value parsed for obase too. ie ibase = 16; obase = 16; sets obase to 0x16 = 22 – Arnavion Dec 10 '19 at 1:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.