Отрицательное число вызывает сбой функции кодирования VarInt - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь реализовать указанную ниже функцию в Python, но как только я ввожу отрицательное число, функция вылетает. Кто-нибудь понимает почему?

public static void writeVarInt(int value) {
    do {
        byte temp = (byte)(value & 0b01111111);

        value >>>= 7;
        if (value != 0) {
            temp |= 0b10000000;
        }
        writeByte(temp);
    } while (value != 0);
}

Вот моя функция:

def write_varint(array, data):
    first_pass = True
    while data != 0 or first_pass:
        first_pass = False
        temp = (data & 0b01111111)
        data >>= 7

        if data != 0:
            temp |= 0b10000000

        print(temp)

        write_byte(array, temp)

def write_byte(array, data):
    write_bytes(array, struct.pack('>b', data))

def write_bytes(array, source_bytes):
    for byte in source_bytes:
        array.append(byte)

1 Ответ

0 голосов
/ 31 января 2020
if data != 0: 
    temp |= 0b10000000

Когда значение data равно -1, это условие не вызывается и, следовательно, temp выходит за пределы диапазона необходимого [-128, 127] и приводит к сбою при вызове функции struct.pack() ( который требует число в этом диапазоне).

...