protobuf writeInt64 на языке c - PullRequest
       37

protobuf writeInt64 на языке c

0 голосов
/ 02 декабря 2018

Я хочу закодировать значение 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].Что не так с моим кодом?

...