3 Int Coding
轻松一刻,前面约定中讲过Leveldb使用了很多VarInt型编码,典型的如后面将涉及到的各种key。其中的编码、解码函数分为VarInt和FixedInt两种。int32和int64操作都是类似的。
3.1 Decode
首先是FixedInt编码,直接上代码,很简单明了。
void EncodeFixed32(char* buf, uint32_t value)
{
if (port::kLittleEndian) {
memcpy(buf, &value,sizeof(value));
} else {
buf[0] = value & 0xff;
buf[1] = (value >> 8)& 0xff;
buf[2] = (value >> 16)& 0xff;
buf[3] = (value >> 24)& 0xff;
}
}
下面是VarInt编码,int32和int64格式,代码如下,有效位是7bit的,因此把uint32按7bit分割,对unsigned char赋值时,超出0xFF会自动截断,因此直接*(ptr++) = v|B即可,不需要再把(v|B)与0xFF作&操作。
char* EncodeVarint32(char* dst, uint32_t v)
{
unsigned char* ptr =reinterpret_cast<unsigne

本文详细介绍了Leveldb中VarInt和FixedInt编码解码的实现,包括EncodeFixed32、EncodeVarint32、EncodeVarint64以及DecodeFixed32和GetVarint32Ptr等函数的细节,阐述了如何进行32位和64位整数的高效编码和解码过程。
最低0.47元/天 解锁文章
9290

被折叠的 条评论
为什么被折叠?



