An Implementation
Listing 1 is short program that test encoding of all possible numbers expressible in 31 bits. The block length is 8 items, each item is 4 bits, and there is one reserved code. The procedures encode() and decode() are compact, yet should provide some flexibility, and a starting point for your application. For more on the encode() and decode() procedures, see the source code available here.
// tst_all_nibbles.c
#include <stdint.h>
#include <assert.h>
#include <stdio.h>
#include "linked_encode_decode.h"
/* A simple test program that goes through all possible
permutations of a 31 bit integer. Encodes into nibbles
where each nibble must be different from 0. Decodes
and compares
*/
int main( void ) {
uint32_t i = 0;
uint32_t j;
uint32_t arr[8];
uint32_t original[8];
uint32_t result;
do {
for ( j = 0; j < 8; j++ ) {
arr[j] = (i >> (j*4)) & 0xF;
original[j] = arr[j];
}
encode( 8, arr );
for ( j = 0; j < 8; j++ )
assert( arr[j] != 0 );
decode( arr );
result = 0;
for ( j = 0; j < 8; j++ )
result |= (arr[j] << (j*4));
assert( result == i );
i -= 2; // i is an uint32_t
if ( (i & 0xFFFFFF) == 0 )
fprintf( stderr,"." );
} while ( i != 0 );
return 0;
}


