我在嵌入式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++;
}
注释掉的printf语句工作正常,但另一个没有。我在这里做错了什么?如何将u8
数组转换为uint32?
答案 0 :(得分:7)
这是因为dt
是一个指针,因此当您将其转换为uint32_t
时,您只需将其地址作为将存储在_Recv
中的值。
您应该尝试将其转换为uint32_t
,然后取消引用它:
uint32_t _Recv = *((uint32_t*)dt)
这样地址将被解释为指向unsigned int
的指针。
更具可读性的方法是使用轮班来构建价值:
uint32_t _Recv = dt[3]<<24 | dt[2]<<16 | dt[1]<<8 | dt[0];
这也可以让你按照自己的意愿管理字节顺序。
答案 1 :(得分:2)
使用memcpy
还有另一种方式,与机器无关。
memcpy (&_Recv,&dt[0],4);
_Recv=htons(_Recv);
这样你就可以拥有一个uint8数组并将任意4个字节转换为uint32