bitstring to char ("01011011" -> char)



  • Hallo,

    Ich habe eine kurze Frage:
    Ich habe einen string der aus einsen und nullen besteht und will jeweils 8 zeichen dieses strings in einen char "kopieren". Also ich suche im Prinzip eine Methode um aus 8 1sen und 0en einen char zu machen.

    Weiß jemand weiter?

    vielen Dank!
    Gruß
    Christian



  • Weiß jetzt nicht ob es nicht wieder einen super-leckeren stringstream oder Boost-Trick gibt, aber das hier sollte es tun:

    static const int[] MULTIPLIERS = { 128, 64, 32, 16, 8, 4, 2, 1 };
    
    // Preconditions: str.length() == 8, str contains only '0's or '1's
    char convert (const std::string& str)
    {
        char c = 0;
    
        for(int i = 0; i < 8; ++i)
            c += MULTIPLIERS[i] * (str[i] - '0');
    
        return c;
    }
    

    Ungetestet.

    Edit: Man könnte natürlich die Multipliers auch berechnen und damit die Begrenzung auf str.length() == 8 aufheben, aber du wolltest ja schon den speziellen Fall, hier ist er 🙂

    MfG SideWinder



  • Danke dir !!! Damit sollte es klappen! 🙂



  • Dazu kann man auch elegant die std::bitset-Klasse benutzen:

    #include <bitset>
    
    std::bitset<8> b("01010101");
    
    char c = static_cast<char>(b.to_ulong());
    

  • Mod

    Die superleckere Lösung 😃 :

    char convert (const std::string& str)
    {
      return std::bitset<8>(str).to_ulong();
    }
    

    edit: Och, zu spät 😞



  • Danke! Das ist ja sogar noch eleganter 😃


Anmelden zum Antworten