binärausgabe einer Variable/Klasse



  • Irgendwie brech ich mir da grad einen ab ein template zu schreiben das einen binären String aus einer class T erstellt =[

    Könnte mir freundlicherweise jemand verraten warum der mist ausgibt?
    Mir fällt irgendwie keine Stelle auf wo mir ein Fehler passiert sein könnte, oder geht das union so nicht?

    greetz
    dreaddy

    #include <string>
    #include <iostream>
    
    using std::cout;
    
    template <class T>
    class binclass
    {
        private:
    
        struct bit
        {
            unsigned int bit00 :1;
    
            std::string tostring()
            {
              std::string retval = "";
              if(bit00)retval="1";else retval="0";
              return retval;
            }
    
        };
    
        union floatval
        {
          bit bits[sizeof(T)*8];
          T val;
        };
    
        floatval value;
    
        public:
        binclass(T val){value.val = val;}
    
        std::string get_string(void)
        {
          std::string retval = "";
    
          for(int i = 0; i < sizeof(T)*8; i++)
          {
            retval +=
            value.bits[i].tostring();
          }
    
          return retval;
        }
    };
    
    int main()
    {
    
      char dst = 42;
      binclass<char> fldsp(dst);
      cout << fldsp.get_string();
    }
    


  • dreaddy schrieb:

    struct bit
        {
            unsigned int bit00 :1;
    
            std::string tostring()
            {
              std::string retval = "";
              if(bit00)retval="1";else retval="0";
              return retval;
            }
    
        };
    
        union floatval
        {
          bit bits[sizeof(T)*8];
          T val;
        };
    

    Du scheinst davon auszugehen, dass struct bit 1 Bit groß ist. Ist es aber nicht, die Mindestgröße für ein Objekt ist 1 Byte. Bitfelder wie int bit:1; sind ein Spezialfall und auch keine Objekte im eigentlichen Sinne, sie haben z.B. keine Adresse.


Anmelden zum Antworten