...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
Thomas Adam [thomas.adam22 at gmail.com]
2009/7/18 Mulyadi Santosa <[email protected]>:
> 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
Ben Okopnik [ben at linuxgazette.net]
On Sat, Jul 18, 2009 at 05:27:42PM +0100, Thomas Adam wrote:
> 2009/7/18 Mulyadi Santosa <[email protected]>: > > 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 *
Mulyadi Santosa [mulyadi.santosa at gmail.com]
On Sun, Jul 19, 2009 at 12:55 AM, Ben Okopnik<[email protected]> 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
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<[email protected]> 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 *
Mulyadi Santosa [mulyadi.santosa at gmail.com]
On Mon, Jul 20, 2009 at 1:03 AM, Ben Okopnik<[email protected]> 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