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

时间:2015-01-13 09:57:30

标签: c embedded

我的代码中有以下变量

uint8_t array[8];
uint64_t epoch;

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

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

另一种选择是什么?

3 个答案:

答案 0 :(得分:1)

这样的事情应该是与字节无关的:

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;
}

答案 1 :(得分:0)

您可以执行以下操作:

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)

请注意,>>运算符始终将位移向最低有效位,因此架构的endinannes对于这段代码无关紧要。

答案 2 :(得分:-2)

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

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