我试图在一个项目中使用某种可变长度的整数进行压缩。现在我有一个函数来计算unsigned long long的实际长度(以字节为单位)(因此应该使用多少字节来正确显示它)。我不想复制unsigned long long被填充到数组的部分(例如,我想从long long 0000复制10110010字节…0000 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中没有指定单个字节的顺序(小端或大端),但我似乎找不到解决这个问题的方法。
为了便于移植,可以使用shift。要将数字分解为字节,请向右移动。若要从字节重新组合数字,请向左移位。例如:
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;