#include #include #include #include typedef struct vbyte_record{ unsigned char* vbyte_result; short vbyte_len; } oneRecord; void displayBits(unsigned char*, int); oneRecord vbyte_compress(int); /*display bits of an unsigned char value*/ void displayBits(unsigned char* value, int len){ int shift = 7; unsigned char mask = '1' << shift; unsigned i, j; for(j=0; j 0){ for(i=index; i>=1; i--){ temp = div(remainder, (int)pow(128, i)); result[index-i] = (char) temp.quot | mask; remainder = temp.rem; } } /*encode the lowest byte*/ result[index] = (char) remainder; record.vbyte_result = result; record.vbyte_len = index+1; return record; } char* varbyte(int number) { oneRecord record; int decom_num; record = vbyte_compress(number); return record.vbyte_result; } #### $compressed.= varbyte($x); print "$x: ",length($x)," compressed ",length($compressed), "\n";