是否有一种方法可以一点一点地修改向量/数组的元素?

时间:2019-05-25 10:25:04

标签: c memory

我正在设置RamBlock“模拟”。使用十六进制(10个元素)的布尔静态数组,这些数组需要逐位单独修改。

uint8_t boolArray[10] = {0x03, 0xED, 0xE8, 0x00, 0xFF, 0x56, 0x01, 0x02, 0xAB, 0x18};

编辑:在需求字段中,提供了一个原型功能:

Std_ReturnType _WriteBoolean(uint8_t ramBlockAddr, uint16_t ramBlockLength, uint16_t byteIndex, uint8_t bitIndex, const uint8_t* value, uint8_t length)

并且我可以使用以下参数修改以下内容:byteIndex,bitIndex,长度和值。

函数如下:

returnValue = _WriteBoolean((uint8_t*)&boolArray[0], 10, 0, 3, (uint8_t*) &x, 4);
/*Bits should be written with the value provided by "x"*/

我可以通过&boolArray[i]访问boolArray []的元素。不知道如何使用从函数(returnValue)获取的新布尔值修改/更新它。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

要打开或关闭某些位,可以使用按位操作。例如,如果我们有一个值为0x3(二进制为0011)来打开第三位,则可以执行value |= (1 << 2)。我们将临时常量1的内容向前移动两个位置,然后执行OR,其值是:0011 | 0100 = 0111。

要稍微关闭一点,我们做同样的事情,只是我们使用常量的补码,然后使用值AND => value &= ~(1 << 2)0111 ~0100 => 01111011 => 0011

联合也可以用来表示内存块:

typedef union {

    uint_8 data;

    struct {

      uint8_t cell1;
      uint8_t cell2;
      uint8_t cell3;
      uint8_t cell4;
      uint8_t cell5;
      uint8_t cell6;
      uint8_t cell7;
      uint8_t cell8;

   };

} Block_t