Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 铸造uint8至uint32_C_Embedded_Xilinx - Fatal编程技术网

C 铸造uint8至uint32

C 铸造uint8至uint32,c,embedded,xilinx,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

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

这是因为dt是一个指针,所以当您将其强制转换为uint32时,只需将其地址作为存储在_Recv中的值即可

您应该尝试将其强制转换为uint32\t,然后取消引用:

uint32_t _Recv = *((uint32_t*)dt)
因此,该地址将被解释为指向无符号int的指针

一种更具可读性的方法是通过转换构建价值:

uint32_t _Recv = dt[3]<<24 | dt[2]<<16 | dt[1]<<8 | dt[0];
这也将允许您按照自己的意愿管理endianness。

这是因为dt是一个指针,所以当您将其强制转换为uint32时,您只需将其地址作为存储在_Recv中的值即可

您应该尝试将其强制转换为uint32\t,然后取消引用:

uint32_t _Recv = *((uint32_t*)dt)
因此,该地址将被解释为指向无符号int的指针

一种更具可读性的方法是通过转换构建价值:

uint32_t _Recv = dt[3]<<24 | dt[2]<<16 | dt[1]<<8 | dt[0];

这也将允许您按照自己的意愿管理endianness。

还有另一种使用memcpy的方法,它独立于机器

memcpy (&_Recv,&dt[0],4);
_Recv=htons(_Recv);

通过这种方式,您可以拥有一个uint8数组,并将任意4个字节强制转换为uint32。还有一种使用memcpy的方式,它与机器无关

memcpy (&_Recv,&dt[0],4);
_Recv=htons(_Recv);
通过这种方式,您可以拥有一个uint8数组,并将任意4个字节强制转换为uint32

与dt[3]不同,*uint32_t*dt与dt[3]不同,是endian独立的