varint算法,摘自:http://blog.csdn.net/liaoquesg/article/details/50897327

最近在看《大规模WEB服务开发技术》这本书中。书中提到“可变长字节码算法”的压缩数据的算法,以达到压缩数据,减少磁盘IO。 
可变长字节码算法: 
任意一个字节的最高位(下标7)均只作为标志位,而且根据字节所在位置需要乘以128的相应幂次;(我觉得这个算法只能用作自然数的压缩)

这是他的伪代码 

仔细研究后,我翻译成PHP版的:

    <?phpfunction codeNumber($n){$bytes = [];while (true){array_unshift($bytes, bcmod($n, 128));if($n < 128){break;}else{$n = intval($n/128);}}$bytes[count($bytes) - 1] += 128;return $bytes;}function encode($numbers){$bytestream = [];foreach ($numbers as $n){$bytestream = array_merge($bytestream, codeNumber($n));}return $bytestream;}function decode($bytestream){$numbers = [];$n = 0;for ($i = 0; $i < count($bytestream); $i++){if($bytestream[$i] < 128){$n = 128 * $n + $bytestream[$i];}else{$n = 128 * $n + ($bytestream[$i] - 128);array_push($numbers, $n);$n = 0;}}return $numbers;}$a = encode([5, 130, 288]);var_dump($a);var_dump(decode($a));打印出来的内容是:
array(5) { [0]=> int(133) [1]=> string(1) "1" [2]=> int(130) [3]=> string(1) "2" [4]=> int(160) }
array(3) { [0]=> int(5) [1]=> int(130) [2]=> int(288) }//写二进制$h = fopen('ejz3.txt', 'wb');foreach ($a as $k => $v){$str3 =  pack('H*', sprintf("%02x", $v));fwrite($h,  $str3);}fclose($h);//读二进制$str2 = file_get_contents('ejz3.txt');$str2 = unpack("H*", $str2);$value = str_split($str2[1], 2);foreach ($value as $k => $v){$value[$k] = base_convert($v, 16, 10);}

转载于:https://www.cnblogs.com/bonelee/p/6655223.html

varint算法——本质上是牺牲最高位作为标识数据结束位,达到变长编码,说白了就是贪心的分割位...相关推荐

  1. 神经网络和反向传播算法——反向传播算法本质上是随机梯度下降,链式求导法则而来的...

    原文:https://www.zybuluo.com/hanbingtao/note/476663 写得非常好,适合入门! 神经元 神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数 ...

  2. 摘要提取算法——本质上就是pagerank,选择rank最高的句子作为摘要,如果结合word2vec应该有非常好的效果...

    最近需要做一些文本摘要的东西,选取了TextRank(论文参见<TextRank: Bringing Order into Texts>)作为对比方案,该方案可以很方便的使用Python相 ...

  3. java dsa 私钥_DSA算法——本质上和RSA是一样的 有公钥和私钥

    DSA算法 DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard ...

  4. 【图论】用一道题从本质上讲清楚Floyd算法

    P1119 [灾后重建] 4 5 1 2 3 4 0 2 1 2 3 1 3 1 2 2 1 4 0 3 5 4 2 0 2 0 1 2 0 1 3 0 1 4 -1 -1 5 4 一道非常好的Flo ...

  5. 2D与3D人脸识别有什么本质上的区别?

    https://www.zhihu.com/question/324123433/answer/681365180 https://www.zhihu.com/question/324123433/a ...

  6. 大数据DDos检测——DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然! 和一个句子的分词算法CRF没有区别!...

    DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然!--和一个句子的分词算法CRF没有区别! 注:传统DDos检测直接基于IP数据发送流量来识别 ...

  7. 机器学习的算法和普通《算法导论》里的算法有什么本质上的异同

    机器学习的算法和普通<算法导论>里的算法有什么本质上的异同? 本人非计算机专业出身,对这些方向感兴趣,所以有此一问.曾经问过一些人,说是机器学习全是数学,是用数学的方式试图去描述和理解我们 ...

  8. python数据库开发 dga_使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...

    from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...

  9. 数据与广告系列三十二:重排ReRank,广告推荐算法链路上的背叛者,生态系统格局的重塑者...

    作者·黄崇远 『数据虫巢』 全文23138字 题图ssyer.com " 在推荐系统又或者计算广告中,重排ReRank明目张胆的把召回.粗排.精排几个链路逻辑辛苦生成的序给打乱,但却敢号称是 ...

最新文章

  1. 在linux中安装nginx
  2. linux内核链表分析
  3. 解决浏览器保存密码自动填充问题
  4. 20161104面试题-面试常问问题
  5. ES 在数据量很大的情况下如何提高查询效率
  6. filesaver.js 导出文件路径_CourseMaker微课制作教程20:做好的微课,如何保存和导出为.mp4等视频格式?...
  7. VueThink配置
  8. Photon服务器引擎入门
  9. Html.RadioButtonFor和Html.DropDownListFor 用法--备忘
  10. 竞价排名才是万恶之源
  11. Mixed Finite Elements for Variational Surface Modeling
  12. 海量中文语料上预训练ALBERT模型:参数更少,效果更好
  13. 标准模板库(STL)之 map 列传 (三)
  14. Python拓展应用——Selenium代刷问卷星问卷,升级版。
  15. 一步一步搭建11gR2 rac+dg之配置单实例的DG(八)
  16. python爬取文件内容_python爬取各类文档方法归类汇总
  17. 闪耀在 UNIX 传奇往事中的启示, UNXI 见证者带你一览究竟
  18. nginx-proxy-manager在线申请证书
  19. python发微信消息_利用python实现微信消息自动提醒
  20. 【Unity】Unity 基本介绍

热门文章

  1. locust自己调试
  2. jdbc插入数据_JMeter数据库测试计划
  3. windows下查看当前进程,杀掉进程等
  4. 【408预推免复习】计算机网络(谢希仁第七版)第五章——运输层
  5. 【Java Web开发指南】Mybatis 中的延迟加载
  6. python【力扣LeetCode算法题库】121-买卖股票的最佳时机
  7. python【蓝桥杯vip练习题库】ADV-185五次方数(枚举)
  8. 优秀的词云展示第三方库——wordcloud
  9. 条件限制select into_SQL全部知识点(夺回控制台掌控权,转义符,SELECT特定列,AND,OR,查询数值,比较运算)...
  10. linux 新建用户_使用Xshell和Xftp连接管理Linux服务器