varint - int32数据编码解码C程序实现

原创 2016年06月01日 11:19:31
#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;

}




版权声明:本文为博主原创文章,未经博主允许不得转载。

LevelDB : Varint

参考: 1. http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ 2. http://blog.csdn.net/sparkliang...
  • chj90220
  • chj90220
  • 2016年06月16日 11:30
  • 594

加解密与编解码算法

A).  Base64 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24位数据,再把这24位数据分成4...
  • u013378306
  • u013378306
  • 2016年07月06日 10:04
  • 1170

go 使用protobuffer proto3

go/golang 使用protobuf3
  • sdsabc2000
  • sdsabc2000
  • 2016年09月08日 16:31
  • 2462

SQLite 变长度整型(varint)编码解码方法

SQLite为了节省存储空间,可以对64-bits的整型变量进行压缩。压缩后的最后一个byte的第一个bit是0,其他byte的第一个bit都是1,如下: 对于十进制数 182, 它的二进制是 10...
  • popvip44
  • popvip44
  • 2016年10月23日 16:00
  • 640

C语言中如int32_t类型的数据结构解…

个人理解*_t中的t可以理解为typedefine。由于各个平台中对基本数据的大小定义不一样,为了兼容各个平台,C语言利用预编译和typedef可以让你最有效的维护你的代码。其实这些都不是新的数据类型...
  • Jiakunboy
  • Jiakunboy
  • 2015年05月02日 16:08
  • 3322

C# System.Int32 与 int 区别

首先,两者确实有区别,其次,有区别是因为.Net Framework机制。 MSDN上对这种区别的说法是:int是是System.Int32的别名。 但这种说法太模糊了。究其根本是因为.Net Fra...
  • yueguangzhiyuan
  • yueguangzhiyuan
  • 2013年12月13日 15:41
  • 1105

NYoj-字符串替换

字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述编写一个程序实现将字符串中的所有"you"替换成"we" 输入输入包含多行数据  每行数据是一个...
  • Holyang_1013197377
  • Holyang_1013197377
  • 2014年09月20日 18:32
  • 1483

C++中UINT32和INT32以及int,BOOL和bool的区别

在AndroidHAL层开发中,编写C++代码的时候,遇到了数据类型的困扰,经过查找资料,总结如下: 1.UNIT32和int以及INT32的区别: (1).int默认是signed int。...
  • u014225510
  • u014225510
  • 2015年07月26日 10:41
  • 3361

Bit-Map实现海量数据映射的简单算法

Bit-Map实现海量数据映射的简单算法 (转自张季伦空间)      最近一直在搞搜索引擎,准确的说是丢了一个月又开始鼓捣搜索引擎,在做避免网页重复搜索时遇到了困难;打算用hash来映射url字符串...
  • zhujunxxxxx
  • zhujunxxxxx
  • 2013年10月04日 11:06
  • 3608

UNIX网络编程——尝试探索基于Linux C的网卡抓包过程

其实想探究网卡抓包问题已经有好久了。前几天找了时间算是基本上了解了那部分的一些基本东西,在这里只是赘述罢了。抓包首先便要知道经过网卡的数据其实都是通过底层的链路层(MAC),在Linux系统中我们获取...
  • ctthunagchneg
  • ctthunagchneg
  • 2013年08月04日 14:09
  • 2341
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:varint - int32数据编码解码C程序实现
举报原因:
原因补充:

(最多只允许输入30个字)