负数导致 VarInt 的编码函数崩溃



我尝试在 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)
if data != 0: 
temp |= 0b10000000

data-1时,这个条件不会被调用,因此temp最终超出了所需的[-128, 127]范围,并在调用函数时struct.pack()崩溃(这需要该范围内的数字(。

最新更新