我在嵌入式C中使用uint8和uin32时遇到了一些麻烦.这是我正在使用的代码...
int b = 0;
u8 dt[4] = {0};
while (there_is_buffer(rbuf)) {
dt[b] = (u8)(popFront(rbuf));
if (b > 2) {
uint32_t _Recv = (uint32_t)dt;
/* xil_printf("data: %x%x%x%x\n\r",dt[3], dt[2], dt[1], dt[0]); */
xil_printf("data: %x\n\r", _Recv);
b = 0;
}
else
b++;
}
Run Code Online (Sandbox Code Playgroud)
注释掉的printf语句工作正常,但另一个没有.我在这里做错了什么?如何将u8数组转换为uint32?
那是因为dt是一个指针所以当你把它投射到uint32_t你时,只需将其地址作为将存储的值_Recv.
您应该尝试将其转换为a uint32_t然后取消引用它:
uint32_t _Recv = *((uint32_t*)dt)
Run Code Online (Sandbox Code Playgroud)
这样地址就会被解释为指向的地址unsigned int.
一种更具可读性的方法是使用移位来构建值:
uint32_t _Recv = dt[3]<<24 | dt[2]<<16 | dt[1]<<8 | dt[0];
Run Code Online (Sandbox Code Playgroud)
这也允许您根据需要管理字节序.