将 int 转换为数组的最佳方法

Best approach for converting int into array

我的代码中有以下变量

uint8_t array[8];
uint64_t epoch;

我需要将纪元变量复制到数组中(纪元的 msb 应该进入数组 [0])。 我通过单独复制每个字节来完成这个逻辑

array[0] = epoch>>56;
array[1] = epoch>>48;
.
.
array[7] = epoch;

还有什么选择??

像这样的东西应该是字节序无关的:

const size_t SIZE64 = sizeof(uint64_t);

for(size_t i=0; i<SIZE64; i++)
{
  uint8_t bits = 8 * (SIZE64-i-1); // 8 bits * (8 bytes - byte index)
  array[i] = epoch >> bits;
}

您可以执行以下操作:

for (int i=0, shift=56; i<8; i++, shift-=8)
    array[i] = epoch >> shift;

这基本上是:

array[0] = epoch>>56; // first iteration (shift = 56)
array[1] = epoch>>48;
..
..
array[7] = epoch>>0; // last iteration (shift = 56 - 7 * 8 = 0)

请注意,>> 运算符总是将位移向最低有效位,因此体系结构的尾数对于这段代码无关紧要。

我认为这更有效,因为它移动了固定数量的位数:

uint8_t i=8;
uint64_t e=epoch;
while(i){
    array[--i]=e;
    e>>=8;
}