问题描述
|
我需要在网络上传输整数数据类型,但不想一直传输所有32(或64)位-数据在99%的时间内只能容纳一个字节-因此看起来需要以某种方式压缩它:例如,如果其他7位仅意味着某个值(0-127),则该字节的第一位为0;否则(如果第一字节为1),则需要将这7个字节向左移动并读取第二个字节做同样的过程。
有一些常用的方法吗?我不想重新发明轮子...
谢谢。
解决方法
您描述的方案(本质上是base-128编码:每个字节是7位base-128 \“ digit \”和单个位标志以指示它是否为最后一位)是一种常见的处理方式这样做。
例如,请参见:
DWARF规范(第7.6节)中有关“ LEB128”的部分;
Google协议缓冲区中的“ Base 128 Varints”;
LLVM位代码格式的“可变宽度整数”(在该处的不同位置使用了不同的宽度)。
, 几乎任何数据压缩算法都能够很好地压缩这种数据流。使用您的语言提供的任何压缩库。