首页 > 解决方案 > 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应该是。我认为>>本身不能代替>>>=。有什么办法吗?

标签: javac++

解决方案


已解决:(现在得到与 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);


}


推荐阅读