digitalmars.D.learn - Packing 5-bit words into size_t-aligned bit-array
- Per =?UTF-8?B?Tm9yZGzDtnc=?= (28/28) Jan 11 2019 I want to pack a letters from a char[] into an array of 5-bit
I want to pack a letters from a char[] into an array of 5-bit encoded English lower letters in a size_t[2]. How do I accomplish that with as few instructions as possible? I currently have size_t[2] words; enum charBits = 5; foreach (const ch_index, const char ch; expr) { ubyte ub = 0; if (ch >= 'a' && ch <= 'z') // English lower letter { ub = cast(ubyte)(ch - 'a'); } else if (ch == ' ') // space { ub = cast(ubyte)(ch - 'z' + 1); } else { dln("Invalid char ", ch); assert(0); } assert(ub < (1 << charBits), "Too large ubyte code"); const bit_index = 8 + charBits*ch_index; // first 8 bits reserved for length // TODO store first `charBits` bits of `ub` at `bit_index` in `words` }
Jan 11 2019