28

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?

terdon
  • 234,489
  • 66
  • 447
  • 667
daisy
  • 53,527
  • 78
  • 236
  • 383

1 Answers1

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

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
2B188

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.
Roland
  • 115
  • 5
rush
  • 27,055
  • 7
  • 87
  • 112
  • 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
  • 5
    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 01:41