数字 > 2^31-1 的变体编码/解码问题
Varint encode/decode issue with number > 2^31-1
下面的代码对数字<= 2^31-1正常工作,但对> 2^31-1的数字产生错误(太大)的结果。这是出乎意料的,因为我从来没有使用过uint32_t。
void encodeVarint(uint64_t value, uint8_t* output, uint8_t &outputSize)
{
outputSize = 0;
while (value > 127)
{
output[outputSize] = ((uint8_t)(value & 127)) | 128;
value >>= 7;
outputSize++;
}
output[outputSize++] = ((uint8_t)value) & 127;
}
uint64_t decodeVarint(uint8_t* input, uint8_t &inputSize)
{
uint64_t ret = 0;
inputSize = 0;
for (uint8_t i = 0; ; i++)
{
ret |= (input[i] & 127) << (7 * i);
inputSize++;
if(!(input[i] & 128))
break;
}
return ret;
}
谁能解释一下我做错了什么?
(input[i] & 127)
的类型应该是int
,并且可以是32位长
试
ret |= (uint64_t)(input[i] & 127) << (7 * i);
ret |= (input[i] & 127) << (7 * i);
相关文章:
- 运行长度编码程序 c++ 的问题
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- PostgreSQL C++ libpq 编码 UTF-8 问题
- 亚马逊在线评估编码问题,以找到第n个几何级数
- 从文件中读取文本时出现编码问题
- C++ 的二叉树编码问题?
- 如何在 C++ VS 中使用原始字符串文字(编码问题)
- 字符串编码问题
- 试图在编码问题中理解此结构而迷失
- UTF-16LE 编码问题与 Qt 文本编辑器用 C++ 编写
- 使用 ubuntu Linux 的 c++ 文件重定向和编码问题
- C++基本的编码问题
- SQLITE-编码问题
- C++编码问题
- 读取文件(ifstream)和写入文件(ofstream)-编码问题
- 在具有给定约束的 n 个同事中选择 m 个朋友.(编码问题)
- Qt 5编码问题(UTF-8、Windows-1250、Windows-1251)
- C/C++编码问题
- 试图通过c++中的OOP正确理解关键字friend,编码问题
- 使用XZIP编码问题