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