임베디드 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
.
a로 캐스트 uint32_t
한 다음 역 참조 를 시도해야 합니다.
uint32_t _Recv = *((uint32_t*)dt)
주소가에 대한 포인터로 해석되도록 unsigned int
.
더 읽기 쉬운 접근 방식은 시프트를 사용하여 가치를 구축하는 것입니다.
uint32_t _Recv = dt[3]<<24 | dt[2]<<16 | dt[1]<<8 | dt[0];
또한 원하는대로 엔디안을 관리 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다