gpt4 book ai didi

将 unsigned long long 的最低字节复制到 C 中的数组

转载 作者:行者123 更新时间:2023-11-30 16:55:11 25 4
gpt4 key购买 nike

我正在尝试在项目中使用某种可变长度整数来进行压缩。现在我有一个函数可以计算 unsigned long long 的实际长度(以字节为单位)(因此应该使用多少字节来正确显示它)。我不想复制正在填充到数组中的 unsigned long long 部分(例如,我想从 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 中未指定各个字节的顺序(小端或大端),但我似乎找不到解决此问题的方法。

最佳答案

要实现可移植,请使用 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;

关于将 unsigned long long 的最低字节复制到 C 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com