将无符号long long的最低字节复制到C中的数组

时间:2016-11-01 17:37:20

标签: c compression memcpy bits

我试图在项目中使用某种可变长度的整数进行压缩。现在我有一个函数来计算无符号long long的实际长度(以字节为单位)(因此应使用多少字节来正确显示它)。我不想将被填充的无符号长整数部分复制到一个数组中(例如,我想从长整长的0000 ... 0000 10110010复制10110010字节)。我尝试过memcpy,但这似乎不起作用。我怎么能这样做?

到目前为止,这是我的代码:

if (list_length(input) >= 1) {
    unsigned long long previous = list_get(input, 0);
    unsigned long long temp;
    for (unsigned int i = 1; i < list_length(input); i++) {
        temp = list_get(input, i);
        unsigned long long value = temp - previous;
        size = delta_get_byte_size(value);
        memcpy(&output[currentByte], &value, size);
        currentByte += size;
        previous = temp;
    }
}

我认为问题来自于个别字节的顺序未在C(小端或大端)中指定,但我似乎无法找到解决此问题的方法。

1 个答案:

答案 0 :(得分:0)

为了便于携带,请使用shift。要将数字分解为字节,请向右移动。要从字节重新组合数字,请使用左移。 E.g:

a[0] = x;
a[1] = x >> 8;
a[2] = x >> 16;
a[3] = x >> 24;
a[4] = x >> 32;

x = a[0];
x += (unsigned)a[1] << 8;
x += (unsigned long)a[2] << 16;
x += (unsigned long)a[3] << 24;
x += (unsigned long long)a[4] << 32;