java - C++ 等价于 Java >>>=? 和 varint 的问题
问题描述
在这里,我有 2 个函数,一个是 c++,一个是 Java。两者都有相同的目的:C++:
void VarIntToBufferArray(int* buffer, int in)
{
std::vector<int> buffVect;
int value = in;
do {
int temp = (int)(value & 0b01111111);
value >> 7;
if (value != 0) {
temp |= 0b10000000;
}
buffVect.push_back(temp);
} while (value != 0);
buffer = &buffVect[0];
}
爪哇:
public static void writeVarInt(int value) {
do {
byte temp = (byte)(value & 0b01111111);
// Note: >>> means that the sign bit is shifted with the rest of the number rather than being left alone
value >>>= 7;
if (value != 0) {
temp |= 0b10000000;
}
writeByte(temp);
} while (value != 0);
}
C++ 版本的代码有问题,因为我在 C++:
0 0 99 -35
和 Java 版本上得到了这个输出:-35 -57 1
应该是。我认为>>本身不能代替>>>=。有什么办法吗?
解决方案
已解决:(现在得到与 Java 相同的输出)
template<typename T>
void convertUnderByteMax(T* temp) {
if (*temp > 127) {
*temp -= 256;
}
}
void VarIntToBufferArray(std::vector<int>& buffer, int in)
{
int value = in;
do {
int temp = (int)(value & 0b01111111);
value = ((unsigned int) value) >> 7;
if (value != 0) {
temp |= 0b10000000;
}
convertUnderByteMax(&temp);
buffer.push_back(temp);
} while (value != 0);
}
推荐阅读
- templates - Boilerplate 和 Starter Kit 有什么区别?
- css - 如何制作一些
- javascript - javascript承诺的语法问题
- javascript - 从 TypeScript 对象中删除动态键
- python - pytorch 前向检查的输入尺寸错误
- python - 在 Windows 10 上安装 Pillow / PyAutoGUI 时出错
- java - ATM使用数据结构搜索客户类的arraylist并将其存储在字符串生成器中
- python - 使用 python 优化将列添加到 CSV 文件(~300GB)
- r - 如何用 dplyr 覆盖数据?
- list - 如何将字符串和整数存储在榆树的列表中?