C++ varint解码
时间: 2023-07-11 16:44:30 浏览: 192
protobuf c++使用手册
3星 · 编辑精心推荐
以下是一个简单的C++实现示例:
```c++
#include <iostream>
#include <vector>
unsigned int decode_varint(std::vector<unsigned char>& data) {
unsigned int result = 0;
unsigned int shift = 0;
for (auto byte : data) {
result |= (byte & 0x7f) << shift;
if (!(byte & 0x80)) {
break;
}
shift += 7;
}
return result;
}
int main() {
std::vector<unsigned char> data = {0x8e, 0xa0, 0x05};
unsigned int decoded_value = decode_varint(data);
std::cout << "Decoded value: " << decoded_value << std::endl;
return 0;
}
```
上述代码中,我们将字节数组作为输入参数传递给`decode_varint`函数。然后,我们逐个读取字节,将每个字节的低7位存储到结果中。如果字节的最高位为1,则我们将shift逐次加7,以便正确地计算每个字节的偏移量。如果最高位为0,则表示这是最后一个字节,我们可以退出循环并返回结果。在main函数中,我们使用一个包含3个字节的字节数组来测试`decode_varint`函数,并输出解码后的结果。
阅读全文