将uint8转换为uint32

时间:2013-12-20 02:58:45

标签: c embedded xilinx

我在嵌入式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?

2 个答案:

答案 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