문제.
변수 선언이 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
'VisualStudio.C++.C# > 코딩팁,함수활용,단편' 카테고리의 다른 글
calling convention. __cdecl, __stdcall . 호출규약 (0) | 2019.05.13 |
---|---|
memcmp, memcpy, memset (0) | 2019.03.13 |
win32api. MessageBox (0) | 2018.09.05 |
HID driver for Windows OS. Human Interface Devices (0) | 2018.09.05 |
unreal. 기본 활용법. (0) | 2017.07.26 |
댓글