uint32_t ui32 = 26584;
uint8_t ui8[4];
////32비트 정수 ui32 를 8비트 정수배열에 배치하기.
uint8_t * pui8 = (uint8_t*)&ui32; // ui32 의 주소를 uint8_t 포인터 형으로 받고.
ui8[0] = *(pui8+0);
ui8[1] = *(pui8+1);
ui8[2] = *(pui8+2);
ui8[3] = *(pui8+3);
///// ui8[0],[1],[2],[3] 개별적으로 분리된 것을 다시 32비트 정수 1개로 변환하기.
//// ui8[0] + 2^8*ui8[1] + 2^16*ui8[2] + 2^24*ui8[3] <- 이렇게 하는것보다 아래과 훨씬 빠르고 간편.
uint32_t myui32 = *(uint32_t*)&ui8[0]; // ui8[0] 주소를 uint32_t포인터형변환하고 그주소의 값을 * 로 받음.
/// 위와 같은 연산이 가능한 이유는 메모리 주소의 연속성이 있기때문에 가능한것.
/// 만일 아래와 같은 방식으로 ui8[] 각각의 값을 uint8_t 개별변수 byte0~3 에 대입한 경우
uint8_t byte0 = ui8[0];
uint8_t byte1 = ui8[0];
uint8_t byte2 = ui8[0];
uint8_t byte3 = ui8[0];
uint32_t myui32 = *(uint32_t*)&byte0; // 이것 절대 안됨. !!!!!
// byt0,1,2,3 각 변수의 메모리 배치는 절대 연속 보장되지 않기 때문에 절대 안됨.
// byte0,1,2,3 을 이용하여 32비트 정수 1개 만들려면 아래처럼 계산해야함.
byte0 + 2^8*byte1 + 2^16*byte2 + 2^24*byte3
연관
- 위와 동일한 원리로 flot형에서도 유용하게 사용가능.
첫 등록 : 2020-01-13
최종 수정 :
단축 주소 : https://igotit.tistory.com/
'VisualStudio.C++.C# > C . C++' 카테고리의 다른 글
C/C++. C 에서 C++ 함수 호출하기. extern "C" 선언. C++ 에서 C함수 호출. (0) | 2020.01.24 |
---|---|
C. C++. 메모리 직접 접근 (0) | 2020.01.20 |
C/C++. 구조체 변수 선언 동시 멤버 초기화 (0) | 2020.01.10 |
C, C++. 상수 2진수 , 16진수 (0) | 2020.01.03 |
C/C++. 메모리 스택, 힙,지역변수, 동적 메모리 할당. stack, heap, new, delete (0) | 2019.12.28 |
댓글