将uint8转换为uint32

chi*_*egg 1 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++;
}
Run Code Online (Sandbox Code Playgroud)

注释掉的printf语句工作正常,但另一个没有.我在这里做错了什么?如何将u8数组转换为uint32?

Jac*_*ack 7

那是因为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)

这也允许您根据需要管理字节序.