직렬 수신된 부동점수 (디코딩 후 오류)

수신 함수 부분 코드는 다음과 같습니다.
u8 buf[12];
float value;

value = *((float *)(&(buf[1])));
printf("value = %f
",value); value += 1; ....

이렇게 작성된 프로그램은 출력을 할 수 있지만,value+=1이 끊깁니다.이 문장에서 뒤의 코드는 집행되지 않을 것이다
u8 buf[12];
float value;

value = *((float *)(&(buf[4])));
printf("value = %f
",value); value += 1; ....

이렇게 작성된 프로그램은 출력을 할 수 있고 뒷 코드도 실행할 수 있으며value+=1에서 카드가 죽었다고 말하지 않는다.이 문장에
원인 분석:
32 연산을 진행할 때 연산에 참여하는 변수 주소는 변수의 유형 길이의 정수 배여야 한다. 첫 번째 상황에서 buf[1]의 주소는 buf의 주소에 1을 더해야 하고 buf[0]의 주소는 짝주소이고 buf[1]의 주소는 기이한 주소이며 2로 정제될 수 있다. 반면에 buf[4]의 주소는 짝주소이고 정제될 수 있다. 그러면 변수의 4칙 연산에 걸리지 않는다.

좋은 웹페이지 즐겨찾기