<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Kévin Subileau &#187; conversion</title> <atom:link href="http://www.kevinsubileau.fr/tag/conversion/feed" rel="self" type="application/rss+xml" /><link>http://www.kevinsubileau.fr</link> <description>Espace personnel</description> <lastBuildDate>Sun, 02 Feb 2020 15:18:58 +0000</lastBuildDate> <language>fr-FR</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Linux/Unix - Conversion de bases en ligne de commande</title><link>http://www.kevinsubileau.fr/informatique/astuces-tutoriels/linux-unix-conversion-base-ligne-de-commande-bc.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link> <comments>http://www.kevinsubileau.fr/informatique/astuces-tutoriels/linux-unix-conversion-base-ligne-de-commande-bc.html#comments</comments> <pubDate>Sun, 10 Mar 2013 21:30:41 +0000</pubDate> <dc:creator>Kévin Subileau</dc:creator> <category><![CDATA[Astuces et Tutoriels]]></category> <category><![CDATA[bc]]></category> <category><![CDATA[commande]]></category> <category><![CDATA[conversion]]></category><guid isPermaLink="false">http://www.kevinsubileau.fr/?p=251</guid> <description><![CDATA[Guide d'utilisation de l'utilitaire de calcul bc pour effectuer des conversions de base, de l'hexadécimal au binaire, du binaire à l'octal, du décimal au binaire, et toutes les autres combinaisons possibles. <a href="http://www.kevinsubileau.fr/informatique/astuces-tutoriels/linux-unix-conversion-base-ligne-de-commande-bc.html">Lire la Suite <span class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Saviez-vous qu'il est possible de<strong> convertir des nombres de bases en bases</strong> en ligne de commande ? Et pas seulement du décimal au binaire !</p><p>Il vous suffit pour cela d'utiliser la génialissime <strong>commande <em>bc</em></strong>. Il s'agit d'un petit outil, présent sur la plupart des systèmes Linux/Unix, qui permet d'effectuer des calculs en tout genre en ligne de commande. L'avantage est que vous pouvez facilement intégrer cette commande dans un script, comme toute autre commande, et ainsi effectuer de nombreux calculs à la suite ou convertir des nombres issus d'une autre commande par exemple.</p><p>Assez de suspens, passons aux choses sérieuses ! Pour faire simple, je vous propose d'étudier ces quelques exemples <em>(le $ symbolise le prompt du shell)</em> :</p><p><strong>Conversion du nombre 42 du décimal au binaire :</strong></p><pre class="brush: bash; gutter: false">$ echo &#039;obase=2;42&#039; | bc
101010</pre><p>N'est-ce pas un joli nombre ?! Plus sérieusement, on utilise la commande <em>echo</em> pour envoyer les ordres de calcul à <em>bc </em>via un<em> pipe</em>.</p><p>Ces ordres consistent à spécifier la <strong>base de sortie</strong> (<em>obase</em>, pour <em><span style="text-decoration: underline;">o</span>utput <span style="text-decoration: underline;">base</span></em>), ici en binaire donc base 2, puis à donner le nombre que l'on souhaite convertir. Les ordres sont séparés par des points-virgules, ou des retours à la ligne (dans le cadre d'un script ou de la lecture des ordres depuis un fichier avec <em>cat</em> par exemple).</p><p><strong>Conversion du nombre 101010 du binaire au décimal :</strong></p><pre class="brush: bash; gutter: false">$ echo &#039;ibase=2;101010&#039; | bc
42</pre><p>Pour effectuer l'opération inverse à la précédente, il suffit de remplacer <em>obase</em> par <em>ibase </em>pour spécifier cette fois ci la <strong>base d'entrée</strong> (<em><span style="text-decoration: underline;">i</span>n</em><em>put <span style="text-decoration: underline;">base</span></em>), ainsi que le nombre à convertir bien évidemment.</p><p><strong>Conversion du nombre 2A de l'hexadécimal au binaire :</strong></p><pre class="brush: bash; gutter: false">$ echo &#039;ibase=16;obase=2;2A&#039; | bc
101010</pre><p>Remarquez qu'il est tout à fait possible de <strong>combiner les deux instructions</strong> <em>ibase</em> et <em>obase</em> pour convertir directement un nombre d'une base à une autre sans passer par le décimal. Je pense que vous avez maintenant compris le principe.</p><p><strong><strong>Bonus : </strong>Conversion de secondes en heures, minutes et secondes :</strong></p><pre class="brush: bash; gutter: false">$ echo &#039;obase=60;7520&#039; | bc
02 05 20</pre><p>Le temps s'exprimant en base 60, il est assez simple de convertir des secondes en heures, minutes et secondes (ou minutes en heures et minutes). Il suffit de spécifier la base 60 en sortie, et de donner le nombre de secondes à convertir. Ici 7520 secondes équivaut à 2 heures, 5 minutes et 20 secondes.</p><p><em>Bc</em> gère en entrée toutes les bases de 2 à 16 compris. En sortie, il n'y a presque pas de limite, tant qu'il s'agit d'une base valide (les bases -5 ou 1 sont un peu difficiles à manier ! Plus de précision dans le man <img src='http://www.kevinsubileau.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p><p><strong><strong>Bonus 2 : c</strong>réation de commandes raccourcies :</strong></p><p>Je vous l'accorde, la base 23 n'est pas la plus courante. Si vous utilisez comme moi plus régulièrement les bases binaire, décimal, ou hexadécimal, vous avez sans doute envie d'avoir des commandes un peu plus courtes à taper. C'est possible simplement en ajoutant ces quelques lignes à votre fichier <em>~/.bashrc</em> :</p><pre class="brush: bash; gutter: true"># Hexadécimal vers décimal
h2d(){
  echo &quot;ibase=16; $@&quot; | tr -s &#039; &#039; &#039;;&#039; | bc
}
# Décimal vers hexadécimal
d2h(){
  echo &quot;obase=16; $@&quot; | tr -s &#039; &#039; &#039;;&#039; | bc
}

# Binaire vers décimal
b2d(){
  echo &quot;ibase=2; $@&quot; | tr -s &#039; &#039; &#039;;&#039; | bc
}
# Décimal vers binaire
d2b(){
  echo &quot;obase=2; $@&quot; | tr -s &#039; &#039; &#039;;&#039; | bc
}</pre><p>L'utilisation est ensuite très simple, il suffit de tapez le nom de la commande raccourcie suivi du nombre ou de la liste de nombres à convertir. Par exemple, pour convertir 101010 et 101011 du binaire au décimal :</p><pre class="brush: bash; gutter: false">$ b2d 101010 101011
42
43</pre><p>Vous pouvez bien sûr changer le nom de ces commandes ou créer vos propres raccourcis en fonction des bases que vous utilisez le plus fréquemment.</p><p>Pour terminer, si vous souhaitez en savoir un peu plus sur <em><strong>bc</strong></em>, n'oubliez pas de consulter, comme toujours, son manuel (<em>man bc</em>). Vous pouvez également vous documenter sur Internet : <a href="http://www.christopher.compagnon.name/sitewww/unix-bc.html">cette page</a> par exemple est plutôt bien détaillé.</p> ]]></content:encoded> <wfw:commentRss>http://www.kevinsubileau.fr/informatique/astuces-tutoriels/linux-unix-conversion-base-ligne-de-commande-bc.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching using disk: basic

Served from: www.kevinsubileau.fr @ 2026-04-17 22:48:11 -->