将8字节uint8_t数组转换为4字节数组

时间:2013-02-25 16:41:14

标签: arrays arduino hex

我正在使用Arduino,我想在uint8_t数组中保存XBee MAC(上下字节)。

现在我正在读取字节没有问题,但是我使用8个字节将它们保存在uint8_t *数组中。 我想将它们保存在一个4字节的数组中。

例如,高位字节为:0013A200。不,它使用:{0,0,1,3,A,2,0,0},类似的东西。

我想用这种方式保存它们:{0x00,0x13,0xA2,0x00}

有可能吗?我还没有办法做到这一点..

2 个答案:

答案 0 :(得分:0)

最简单的方法如下:

union {
  uint32_t dword;
  struct
  {
     uint8_t b0 : 4;
     uint8_t b1 : 4;
     uint8_t b2 : 4;
     uint8_t b3 : 4;
     uint8_t b4 : 4;
     uint8_t b5 : 4;
     uint8_t b6 : 4;
     uint8_t b7 : 4;
  } b;
//  uint8_t nibble[] : 4; // can't make an array!
} XbeeMAC;

...

XbeeMAC.b.b0 = 0;
XbeeMAC.b.b1 = 1;
XbeeMAC.b.b2 = 2;
XbeeMAC.b.b3 = 3;
XbeeMAC.b.b4 = 4;
XbeeMAC.b.b5 = 5;
XbeeMAC.b.b6 = 6;
XbeeMAC.b.b7 = 7;
Serial.print(F(" XbeeMAC.dword=")); 
Serial.println(XbeeMAC.dword,HEX);

输出

 XbeeMAC.dword=76543210

如果你不能制作一个半字节数组,它们会被输入并存储为单独的uint8_t。

答案 1 :(得分:0)

我会这样做:

uint8_t XbeeMAC[] = {0x00, 0x13, 0xA2, 0x00};