天天看點

varint - int32資料編碼解碼C程式實作

#include <stdio.h>

int Variant_Encode()

{

          unsigned char data[5]={0} ;

          int count = 0;

          int value=300;

          do

          {

              data[count] = (unsigned char )((value & 0x7F) | 0x80);

              count++;

          } while ((value >>= 7) != 0);

          data[count - 1] &= 0x7F;

        printf("data=%x,%x,%x,%x,%x\n",data[0],data[1],data[2],data[3],data[4]);

        return 0;

}

unsigned int Variant_Decode ( )

{

        unsigned char data[5]={ 0xac,0x02,0x00,0x00,0x00 };

        unsigned int value = data[0];

        if ((value & 0x80) == 0) return value;

        value &= 0x7F;

        unsigned int chunk = data[1];

        value |= (chunk & 0x7F) << 7;

        if ((chunk & 0x80) == 0) return value;

        chunk = data[2];

        value |= (chunk & 0x7F) << 14;

        if ((chunk & 0x80) == 0) return value;

        chunk = data[3];

        value |= (chunk & 0x7F) << 21;

        if ((chunk & 0x80) == 0) return value;

        chunk = data[4]; ;

        value |= chunk << 28;

        if ((chunk & 0xF0) == 0) return value;

}