【问题标题】:Copy lowest bytes of an unsigned long long to array in C将 unsigned long long 的最低字节复制到 C 中的数组
【发布时间】:2016-11-01 17:37:19
【问题描述】:

我正在尝试在项目中使用某种可变长度整数进行压缩。现在我有一个函数可以计算 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 中未指定单个字节的顺序(小端或大端),但我似乎无法找到解决此问题的方法。

【问题讨论】:

  • 然后避免内存寻址? temp &amp; 0xFF 并转换为字节大小的类型
  • 说到不清楚的代码......这里有3个未知函数和几个未知变量类型,你正在使用!!!这段代码的输入到底是什么(即input 变量的类型)?

标签: c compression memcpy bits


【解决方案1】:

要便携,请使用 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2013-03-05
    • 2011-08-06
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多