Я хочу закодировать значение uint64, равное 1543543445021000000LL.Когда я пытался закодировать это значение на языке c, первый байт был неправильным.Вот мой код и результат:
uint32_t write_raw_varint64(uint8_t *dst, uint64_t value) {
uint8_t buf[10] = {0};
uint32_t i = 0;
if (0 == value) {
memcpy(dst, (uint8_t*)&value, 1);
return 1;
}
while (value) {
buf[i++] = (uint8_t)((value & 0x7F) | 0x80);
value >>= 7;
}
buf[i-1] &= 0x7F;
memcpy(dst, buf, i);
return i;
}
[ 192, 130, 240, 254, 220, 146, 241, 181, 21 ]
В соответствии с библиотекой Python google protobuf значение закодировано в [ 128 , 130, 240, 254, 220, 146, 241181, 21].Что не так с моим кодом?