我尝试在 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()
崩溃(这需要该范围内的数字(。