can anyone tell me why is it giving bus error?

Viewed 44

it is a code for variable-length integer (popularly known as google's varlen) compression algorithm which belongs to variable length coding category.

#include <bits/stdc++.h>

template<typename int_t = uint64_t>
size_t encodeVarint(int_t value, uint8_t* output) {
    size_t outputSize = 0;
    while (value > 127) {
        output[outputSize] = ((uint8_t)(value & 127)) | 128;
        value >>= 7;
        outputSize++;
    }
    output[outputSize++] = ((uint8_t)value) & 127;
    return outputSize;
}



template<typename int_t = uint64_t>
int_t decodeVarint(uint8_t* input, size_t inputSize) {
    int_t ret = 0;
    for (size_t i = 0; i < inputSize; i++) {
       ret |= (input[i] & 127) << (7 * i);
       if(!(input[i] & 128)) {
            break;
       }
    }
    return ret;
}


using namespace std;
int main(int argc, char** argv) {
uint8_t* buf;
size_t outsize = encodeVarint<uint64_t>(0xCAFE, buf);
cout << decodeVarint(buf, outsize) << endl;
}
0 Answers
Related