...making Linux just a little more fun!

**
Mulyadi Santosa [mulyadi.santosa at gmail.com]
**

For those who needs quick help on number conversion between base-x to base-y, bc can lend a help here. For example, what's the hexadecimal form of 116?:

$ echo 'obase=16; 116' | bc 74

And what does binary 11010101 look in decimal?

$ echo 'ibase=2; 11010101' | bc 213

By doing below step, you directly convert binary 11010101 to hexadecimal:

$ echo 'obase=16; ibase=2; 11010101' | bc D5

Note that "obase" must preced "ibase" in order to make a correct final result.

regards,

-- Mulyadi Santosa Freelance Linux trainer blog: the-hydra.blogspot.com

Top Back

**
Thomas Adam [thomas.adam22 at gmail.com]
**

2009/7/18 Mulyadi Santosa <mulyadi.santosa@gmail.com>:

> For those who needs quick help on number conversion between base-x to > base-y, bc can lend a help here. For example, what's the hexadecimal > form of 116?: > $ echo 'obase=16; 116' | bc > 74

Or as a semi-equivalent, GNU AWK has strtonum() and you can of course do the whole lot in Perl. (Which is arguarbly more portable than using bc or dc.)

-- Thomas Adam

Top Back

**
Ben Okopnik [ben at linuxgazette.net]
**

On Sat, Jul 18, 2009 at 05:27:42PM +0100, Thomas Adam wrote:

> 2009/7/18 Mulyadi Santosa <mulyadi.santosa@gmail.com>: > > For those who needs quick help on number conversion between base-x to > > base-y, bc can lend a help here. For example, what's the hexadecimal > > form of 116?: > > $ echo 'obase=16; 116' | bc > > 74 > > Or as a semi-equivalent, GNU AWK has strtonum() and you can of course > do the whole lot in Perl. (Which is arguarbly more portable than > using bc or dc.)

ben@Jotunheim:~$ printf '%x\n' 116 74 ben@Jotunheim:~$ printf '%o\n' 116 164 ben@Jotunheim:~$ printf '%e\n' 256347 2.563470e+05

Quick review (your version of Bash may support other conversions):

%o an unsigned integer, in octal %x an unsigned integer, in hexadecimal %e a floating-point number, in scientific notation %f a floating-point number, in fixed decimal notation %g a floating-point number, in %e or %f notation %X like %x, but using upper-case letters %E like %e, but using an upper-case "E" %G like %g, but with an upper-case "E" (if applicable)

As Thomas points out, however, for OS and shell-independent conversion, there's always Perl. 'bc' is also useful, though, whenever you need a quick bit of math processing in a shell script.

-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *

Top Back

**
Mulyadi Santosa [mulyadi.santosa at gmail.com]
**

On Sun, Jul 19, 2009 at 12:55 AM, Ben Okopnik<ben@linuxgazette.net> wrote:

> Quick review (your version of Bash may support other conversions): > > `` > %o an unsigned integer, in octal > %x an unsigned integer, in hexadecimal > %e a floating-point number, in scientific notation > %f a floating-point number, in fixed decimal notation > %g a floating-point number, in %e or %f notation > %X like %x, but using upper-case letters > %E like %e, but using an upper-case "E" > %G like %g, but with an upper-case "E" (if applicable) > ''

Ouch, didn't know that before... thanks for pointing that out!

regards,

-- Mulyadi Santosa Freelance Linux trainer blog: the-hydra.blogspot.com

Top Back

**
Ben Okopnik [ben at linuxgazette.net]
**

On Sun, Jul 19, 2009 at 09:15:47PM +0700, Mulyadi Santosa wrote:

> On Sun, Jul 19, 2009 at 12:55 AM, Ben Okopnik<ben@linuxgazette.net> wrote: > > Quick review (your version of Bash may support other conversions): > > > > `` > > %o an unsigned integer, in octal > > %x an unsigned integer, in hexadecimal > > %e a floating-point number, in scientific notation > > %f a floating-point number, in fixed decimal notation > > %g a floating-point number, in %e or %f notation > > %X like %x, but using upper-case letters > > %E like %e, but using an upper-case "E" > > %G like %g, but with an upper-case "E" (if applicable) > > '' > > Ouch, didn't know that before... thanks for pointing that out!

That shouldn't be an "ouch" - it's useful!

The "printf" in Bash is a rather useful gadget - in its basic form, it's a shell-independent command that works the same way everywhere (unlike, e.g., "echo".) It also has a whole lot of formatting and conversion magic - and it's made even more useful by its '-v' argument; this allows you to use it as the equivalent of "sprintf". That is, you don't have to use command substitution on "printf" to assign its output to a variable:

# Instead of this... hex_num=$(printf "0x%x" 1742) # ...do this: printf -c hex_num "0x%x" 1742

-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *

Top Back

**
Mulyadi Santosa [mulyadi.santosa at gmail.com]
**

On Mon, Jul 20, 2009 at 1:03 AM, Ben Okopnik<ben@linuxgazette.net> wrote:

> That shouldn't be an "ouch" - it's useful! > > The "printf" in Bash is a rather useful gadget - in its basic form, it's > a shell-independent command that works the same way everywhere (unlike, > e.g., "echo".) It also has a whole lot of formatting and conversion > magic - and it's made even more useful by its '-v' argument; this allows > you to use it as the equivalent of "sprintf". That is, you don't have > to use command substitution on "printf" to assign its output to a > variable: > > ``` > # Instead of this... > hex_num=$(printf "0x%x" 1742) > > # ...do this: > printf -c hex_num "0x%x" 1742 > '''

I see. Several months ago, when someone talked about printf in bash, I was thinking he/she was referring to C function. OK, now I know more about printf in bash. Very useful, will keep them in mind!

regards,

-- Mulyadi Santosa Freelance Linux trainer blog: the-hydra.blogspot.com

Top Back