Dezimal in Binär



  • Hej Freakz!
    Ich hab ein kleines Problem bei der Umwandlung von dezimal in binär zahlen sprich bei der ausgabe.
    Meine frage wieso gibt es printf("%x","%o") aber nichts für binär? Was kann ich da machen ?

    Würde mich über eine Antwort freuen...
    º¿º Hever



  • Warum es das nicht gibt ist in der Tat eine gute Frage... ich bau mal eine Antwort und schieb's dann in die FAQ. Das kommt so oft...

    const char* decimalToBinary(const long value, 
                                const unsigned length,
                                char* pszBuffer)
    {
       if ( (length == 0) || (length > 32) )
       {
          pszBuffer = '\0';
          return pszBuffer;
       }
    
       unsigned digit = 1 << (length - 1);
       char* pszCurrent = pszBuffer;
    
       do
       {
          if (value & digit)
          {
             *pszCurrent = '1';
          }
          else
          {
             *pszCurrent = '0';
          }
          pszCurrent++;
          digit /= 2;
       } while (digit != 0);
    
       *pszCurrent = '\0';
    
       return pszBuffer;
    }
    

    1. Param: die Zahl
    2. Param: Anzahl der Binärstellen (von 1..32)
    3. Param: Zeiger auf ein char-Array, das den String aufnehmen kann

    Unter Verwendung der C++ Standardbibliothek kann man auch folgendes schreiben:

    template <std::size_t NrOfBits> 
    std::string DezToBin(unsigned long long Wert)
    {
        std::bitset<NrOfBits> AlsBits(Wert);
        return AlsBits.template to_string<
          std::string::value_type, std::string::traits_type, std::string::allocator_type
        >();
    }
    
    // C++11:
    
    template <std::size_t NrOfBits> 
    std::string DezToBin(unsigned long long Wert, char null = '0', char one = '1')
    {
        std::bitset<NrOfBits> AlsBits(Wert);
        return AlsBits.to_string(null, one);
    }
    

    Benötigte Header: <string> und <bitset>.

    [ Dieser Beitrag wurde am 27.10.2001 um 13:51 Uhr von Marc++us editiert. ]
    Edit v. Arcoth: C++11 ergänzt und Code korrigiert.


Anmelden zum Antworten