4bit Datentyp



  • Hat jemand eine Ahnung, wie ich einen 4bit-Datentyp implementieren kann? Ein Bitfeld scheidet aus...

    Mfg, Lord Kefir



  • char a = 111;
    a &= 0x0f; // schneidet die oberen 4 Bits weg
    

    Sowas wär das einfachste...



  • geht ned



  • 8 Bit ist das kleinste, was du wirklich adressieren kannst - wenn du weniger benötigst, mußt du mit Bit-Operatoren hantieren:

    typedef unsigned char HBYTE;
    #define HLEN(x) (x+1)/2
    
    HBYTE HB_get(HBYTE* field,size_t ind)
    {
      HBYTE h0=field[ind/2];
      return (ind%2) ? h0&0x0f : (h0&0xf0)>>4;
    }
    
    void HB_set(HBYTE* field,size_t ind,HBYTE val)
    {
      val &= 0x0f;
      field[ind/2] &= (ind%2) ? 0xf0 : 0x0f;
      field[ind/2] |= (ind%2) ? val : val<<4;
    }
    


  • CStoll schrieb:

    HBYTE HB_get(HBYTE* field,size_t ind)
    {
      HBYTE h0=field[ind/2];
      return (ind%2) ? h0&0x0f : (h0&0xf0)>>4;
    }
    
    void HB_set(HBYTE* field,size_t ind,HBYTE val)
    {
      val &= 0x0f;
      field[ind/2] &= (ind%2) ? 0xf0 : 0x0f;
      field[ind/2] |= (ind%2) ? val : val<<4;
    }
    

    das sieht ja super-kompliziert aus. mach's doch so ähnlich:

    #define SET_LOWER(_b_,_x_) ((_b_)=((_b_)&0xf0)|((_x_)&0x0f))
    #define SET_UPPER(_b_,_x_) ((_b_)=((_b_)&0x0f)|((_x_)<<4))
    #define GET_LOWER(_b_) ((_b_)&0x0f)
    #define GET_UPPER(_b_) ((_b_)>>4)
    


  • Jup, danke für den Tipp. Habe mich bisher eher um die Bitoperatoren herumgerdückt 😉 Wird dann wohl mal Zeit...

    Mfg, Lord Kefir



  • CStoll schrieb:

    8 Bit ist das kleinste, was du wirklich adressieren kannst - wenn du weniger benötigst, mußt du mit Bit-Operatoren hantieren:

    typedef unsigned char HBYTE;
    #define HLEN(x) (x+1)/2
    
    HBYTE HB_get(HBYTE* field,size_t ind)
    {
      HBYTE h0=field[ind/2];
      return (ind%2) ? h0&0x0f : (h0&0xf0)>>4;
    }
    
    void HB_set(HBYTE* field,size_t ind,HBYTE val)
    {
      val &= 0x0f;
      field[ind/2] &= (ind%2) ? 0xf0 : 0x0f;
      field[ind/2] |= (ind%2) ? val : val<<4;
    }
    

    hässlich 👎


Anmelden zum Antworten