带移位和/或操作的缓冲操作

时间:2017-10-31 08:50:58

标签: c

我不太确定我的代码,并希望改进它。

我从SPI(8位通信)接收一些数据并将其存储到8位缓冲区中。要使用它,我想使用32位字。我知道我的第一个代码可行,但我不确定第二个代码,有人可以确认吗?

uint8_t *regData[5];

spi_xfer(fd, "\x24\xFF\xFF\xFF\xCC", 5, regData, 5);
uint32_t regVal;
regVal = (regData[0]);
regVal += (uint32_t)(regData[1]) << 8; 
regVal += (uint32_t)(regData[2]) << 16; 
regVal += (uint32_t)(regData[3]) << 24; 

第二个:

uint8_t *regData[5];

spi_xfer(fd, "\x24\xFF\xFF\xFF\xCC", 5, regData, 5);
uint32_t regVal;
regVal = (regData[0]) | (uint32_t)(regData[1]) << 8 | (uint32_t)(regData[2]) << 16 | (uint32_t)(regData[3]) << 24;

非常感谢你的帮助!

圣布里厄

1 个答案:

答案 0 :(得分:1)

uint8_t *regData[5];

regData[]是一个指针数组。如果是这样,要检索存储在数组中指针的值,您需要dereference the pointer

regVal = *(regData[0]);

否则,操作会将regData[0]中存储的地址分配给regVal,而不是存储在地址中的值。

相关问题