Zahlensysteme umrechnen mit bc und Script dazu

Ich muss oft Zahlen von einem Zahlensystem in ein anderes umwandeln. Für kleine Zahlen und bekannte Basen geht das noch im Kopf, aber wenn man viele oder grosse Zahlen umwandeln will, nimmt man gerne die Hilfe eines Computers entgegen. Damit ich nicht auf eine Internetverbindung und ein Onlinetool angewiesen bin, entwickelte ich ein kleines Script, welches Zahlensysteme für mich umwandelt.

Zahlensysteme umrechnen mit bc

Mit bc kann man ganz einfach Zahlensysteme umrechnen. Das kleine Tool bc ist bei allen gängigen Linux Distributionen installiert. Mit ibase gibt man das Input-Zahlensystem und mit obase das Output-Zahlensystem an. Auf der Konsole sieht das so aus:

$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
obase=16
ibase=2
1111
F
^D

Die Befehle obase und ibase akzeptieren Werte zwischen 2 und 16. Die Buchstaben aus Zahlensystemen müssen als Grossbuchstaben geschrieben werden, da Kleinbuchstagen in bc als Variabeln interpretiert werden. Wichtig ist, dass man zuerst obase und erst dann ibase definiert, da sonst obase mit dem Zahlensystem von ibase ausgedrückt wird, was man eigentlich nicht will. Mit Ctrl-D kann bc beendet werden.

Die Befehle kann man mittels <<< direkt an bc schicken:

$ bc &lt;&lt;&lt; "obase=16; ibase=2; 1111"
F

Script für die Umwandlung von Zahlensystemen

Folgendes Script macht einem das Leben noch etwas einfacher, da es einfacher aufgerufen werden kann und die Eingaben überprüft werden:

#!/usr/bin/bash
########################################################################
#
# baseconv
# Convert numbers from one base to another
#
########################################################################

########################################################################
# Variables
FROM=10
TO=10

########################################################################
# Functions
PrintUsage() {
echo “Convert numbers from one base to another

Usage:
baseconv from to number”
}

########################################################################
# Main

# Check Arguments
if [ “$#” -ne “3” ]
then
echo “You need to enter 3 numbers.”
PrintUsage
exit 1
else
IBASE=”${1^^}” # ^^ = Uppercase
OBASE=”${2^^}”
NUMBER=”${3^^}”
fi

if ! [[ “$IBASE” =~ ^[0-9A-F]+$ ]]
then
echo “Input Base is not a number.”
PrintUsage
exit 1
elif ! [[ “$OBASE” =~ ^[0-9A-F]+$ ]]
then
echo “Output Base is not a number.”
PrintUsage
exit 1
elif ! [[ “$NUMBER” =~ ^[.0-9A-F]+$ ]]
then
echo “Input Number is not a number.”
PrintUsage
exit 1
fi

# Let’s convert!
bc <<< “obase=$OBASE; ibase=$IBASE; $NUMBER”

# EOF

Das Script baseconv ist auch in meinem GitHub Repository Scripts zu finden: https://github.com/mindfuckup/Scripts/.

Beispiele

Das Script wird wie folgt benutzt:

Usage:
baseconv from to number

Zuerst das Input-Zahlensystem, dann das Output-Zahlensystem und dann die zu kovertierende Zahl.

Umwandlung von Hexadezimal zu Binär:

$ baseconv 16 2 F
1111

Umwandlung von Binär zu Dezimal:

$ baseconv 2 10 1111
15

Links und weitere Informationen

2 thoughts on “Zahlensysteme umrechnen mit bc und Script dazu

  1. Hoi Emanuel

    Besten dank für dein Skript bezüglich der Umwandlung in verschiedene Zahlensysteme. Eine kleine Anmerkung bzw. Verbesserung, habe ich für meine Bedürfnisse noch angepasst.
    Zeile 48 den “.” Punkt noch hinzugefügt, damit auch Zahlen mit Nachkommastellen umgerechnet werden können.

    elif ! [[ "$NUMBER" =~ ^[.0-9A-F]+$ ]]

    Besten Dank

    Gruss

    Roger Aebi
    MAS Informatik Studen an der ZHAW

    • Hey Roger

      Sorry, dein Kommentar ist im Spamfolder gelandet und ich habe ihn deshalb erst jetzt gesehen.

      Dein “Patch” finde ich super. Ich habe das gleich so angepasst. Vielen Dank!

      Gruss,
      Emanuel

Leave a Comment