Here's my code for that, with error checking removed for clarity:
'reverse(x,y)' just flips the last 'y' bits around in 'x' - i.e. reverses the bit ordering in the lowest 'y' bits.Code:void codetable_generate(struct Codetable_entry *table, size_t len) { uint32_t next_code = 0; for(uint32_t pass_len = 1; pass_len < 16; pass_len++) { for(size_t i = 0; i < len; i++) { if(table[i].length == pass_len) { table[i].code = reverse(next_code,pass_len); next_code++; } } next_code <<= 1; } }