Re: [OT] GNU bc base conversion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Aug 31, 2015, at 10:05 AM, Mike - st257 <silvertip257@xxxxxxxxx> wrote:
> 
> On Mon, Aug 31, 2015 at 11:15 AM, Warren Young <wyml@xxxxxxxxxxx> wrote:
> 
>> ibase=A and obase=A
> 
> Not sure how this helps me with my most recent example of bin_to_hex where
> the ibase within the define clause wasn't honored.

That’s because your bin_to_hex function is erroneously assuming that its input is just a string of digits that has no base interpretation, so that it can set ibase *after* bc has already seen the value, and that this will change the meaning of the prior input.

That’s just plain wrong: the prior input has already been interpreted.  You can’t wind back the clock like that.  That sort of thinking only works in a string-based language like shell or Tcl, where a numeric string doesn’t take a meaning until you assign one.

The correct form is:

    ibase=A   /* needed only if ibase might not be 10 at this point */
    obase=A   /* ditto */
    obase=16  /* means 16-base-10 here */
    ibase=2   /* no possibility of confusion */
    10101011

Result: AB, as expected.

The tricky bit is that you can’t swap the second pair of ibase and obase settings, since that would cause bc(1) to interpret obase=16 in base 2: bc(1) will clamp “16” to 11, which in base 2 is 3-base-10.
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
https://lists.centos.org/mailman/listinfo/centos




[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]
  Powered by Linux