簡體   English   中英

將uint8轉換為uint32

[英]Casting uint8 to uint32

我在以嵌入式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_t ,只需將其地址作為要存儲在_Recv的值_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];

這也將允許您根據需要管理字節序。

還有另一種使用memcpy方式,它與機器無關。

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

這樣,您可以擁有一個uint8數組並將任意4個字節強制轉換為uint32

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM