对于高精度采样结果,大数其数值最大可能需要3字节,据变最少1字节,长存储算采用标准C的嵌入基础数据类型,U16太小无法满足需求,式算U32则浪费内存。法之法当样本量很大时,其占用的空间问题便突显出来。能否采用变长数据类型存储呢?对小数据采用U8,大数据采用U32,随着数值大小动态分配存储空间,就是本文的讨论的重点。
U32的空间其数值范围最大接近2^32,该值非常大,实际数值范围远小于它,高位必然为0。例如U32表示1使用0x00000001,前面位都是0,其表达的数值和U8的0x01是一样的,前面重复的一串0属于冗余数据区,是可以剔除的。
假设5个数据D0..4,原本每个数据固定为U32类型,将其高位冗余0去掉,再拼接到U8的一维数组,则占用的空间和大大缩小。思路的核心是把 U32 或者U64 数组裁剪后拼接成U8 数组,同时确保使用时可
根据U8 数组中存储的信息将对应的数值还原。
假设有0x00000001、0x00000101、0x00000001三个数据,其有效部分是0x01、0x0101、0x01,如果直接拼接在一起,则没法区分0x01010101的含义。因此数据在去掉高位0之后,还需进行编码标记,便于后续解析还原。
数据编码的主要作用是标记当前数据占用多少连续字节,有两种方案:
1、固定位来定义字节长度(2位可以表示4字节)
一字节:00
(责任编辑:探索)
iPhone7十大新特性:双摄像头、无线充电技术等功能都在这里
明明国产手机已经崛起了,为什么很多人买高端机还是只认准iPhone