본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

float 형 변수에 할당된 4바이트 메모리의 각 바이트 단위로 접근하는법.

by 리치굿맨 2019. 2. 20.

 

문제.

 

변수 선언이   float f_value;  처럼 float 으로 선언되어있어서, 통상적인 실수값을 이 변수에 대입(예 f_value = 3.789f )하여 실수로 활용하지 않고,

f_value 에 할당된 메모리 4바이트들의 각 바이트들에 개별적으로 unsigned char 형의 값을 기록하고 각 바이트별로 저장된 값을 활용하고자 하는 경우.

 

즉, f_value 에 할당되어있는 메모리는 이렇게 생겼다  ->   | 1번 바이트 | 2번 바이트 | 3번 바이트 | 4번 바이트 |

위 메모리의 각 바이트 접근하는법.

 

float 형 변수 메모리의 각 바이트 별로 핸들링 하는법.

 

unsigned char 형의 포인터 변수 생성 하고 여기에 f_value 의 주소를 (unsigned char*) 로 형변환한다.

 

unsigned char* uc = (unsigned char*)&f_value;

 

이제 uc 를 이용하여 실수변수 f_value 메모리의 각 바이트 단위로 접근가능하다. 

 

즉, f_value에 할당된 메모리의

-  1번 바이트 접근 주소 = uc

-  2번 바이트 접근 주소 = uc+1

-  3번 바이트 접근 주소 = uc+2

-  4번 바이트 접근 주소 = uc+3

 

활용예.

f_vlaue 메모리의 3번 바이트에 250 을 기록하고자 한다면, *(uc+2) = 250;

f_value 메모리의 2번 바이트의 값을 받고자 한다면, unsigned char my_8bit = *(uc+1);

 

 

 

주의사항.

 

위와 같은 실수 메모리 1바이트 단위로 접근하는 처리를 GCC에서 구현한 경우 컴파일러 옵션에 따라 엉둥한 결과주니 조심할것. 

GCC 에서의 옵션 처리 해결책 -> https://igotit.tistory.com/2084

 

GCC 외  KEIL 컴파일러든, Visual C++ 이든 다 정상작동하는 코드임.

 

 

 

 

 

 

 

 

 

 


첫등록 : 2015년 1월 17일

최종수정 : 2019년 2월 20일 

 

본 글 단축주소 : https://igotit.tistory.com/214

 


 

 

 

 

 

 

 

 

태그

,

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT