Resource icon

[C] DecToBin Funktion - Integerwert in Binärstring konvertieren

Programmiersprache(n)
C (min. C99)
Betriebssystem(e)
unspezifisch
Möchte man einen integralen Wert in einen Binärstring konvertieren, kann man sich der itoa() Funktion bedienen. Diese stellt allerdings nur ein Erweiterung dar, die nicht zum Umfang des C-Sprachstandards gehört (auch wenn sie verbreitet unterstützt wird).
Mit ein paar Zeilen Code lässt sich aber auch eine Alternative schaffen.

C:
#include <stdio.h>

#include <stdint.h>
#include <limits.h>

/** \brief  Integerwert in Binärstring konvertieren
*
*  \param  dec     zu konvertierender Wert
*  \param  width   Breite des zu konvertierenden Werts in Bytes
*  \param  bin     Pointer auf einen Puffer für den Binärstring (Breite min. CHAR_BIT * width + 1)
*
*  \return char*   bin
*/
char *DecToBin(uintmax_t dec, const size_t width, char *const bin)
{
  // Plausibilitätsprüfung
  if (bin)
  {
    // Iterator auf die Position der Nullterminierung des Strings zuweisen.
    char *it = bin + CHAR_BIT * width;

    // Nullterminierung setzen ;
    // Prüfen ob der Iterator den Anfang des Strings erreicht hat und Iterator dekrementieren ;
    // Wert des derzeit niedrigsten Bits des Dezimalwerts zum ASCII Wert von '0' addieren
    //   (ergibt '0' bei 0 und '1' bei 1) und der derzeitigen Position im String zuweisen ,
    //   danach den Dezimalwert 1 Bit nach rechts shiften.
    for (*it = 0; it-- != bin; *it = (dec & 1) + '0', dec >>= 1);
  }

  // Pointer auf den veränderten String zurückgeben.
  return bin;
}


// Beispiel:

int main(void)
{
  char buffer[100] = {0};

  for (int i = SCHAR_MIN; i <= SCHAR_MAX; ++i)
    puts(DecToBin(i, sizeof(signed char), buffer));

  return 0;
}
Autor
German
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen
Oben