[英]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.