프로젝트 & 과제/3학년

[C언어] char 포인터로 배열 읽기

qqlzzb 2022. 2. 3. 23:06

개요

프로그래밍 언어 : C언어

과제 수행 날짜 : 2020.10.16

과제 개요 : char 포인터로 int 배열의 값을 한 바이트씩 읽어서 출력

 

코드

#include <stdio.h>

int main()
{
	int data[6] = { 256001,100000000,2147483647,3,4,5};
	int i;
	
	for (int j = 0; j < 6; j++)
	{	
		char *p = &data[j];
		
		for (int k = 0; k < 4; k++)
		{
			i = (*p &0xFF) +((*(p + 1) & 0xFF) * 256) + (*(p + 2) & 0xFF) * (256*256) + (*(p+3)&0xFF)*(256*256*256);
			//printf("%3x ", *(p+k)&0xFF);
		}
		printf("1차원 배열 data의 %d 번째 데이터는 %d 입니다.\n", j, i);
	}
	return 0;
}

결과

char 형식의 포인터로는 int 변수의 1바이트씩만 읽을 수 있으므로 1바이트씩 읽어서 자리에 맞게 int i에 저장해야 한다. *p로 값을 얻으면 하위 2비트를 제외한 상위비트가 F로 채워져 있으므로, 0xFF와 &연산하여 의미 있는 값만 얻어낸다. *p는 data[j]의 첫 번째 바이트를 가리키고, *(p + 1)을 하면 그 다음 바이트를 가리킨다. 이를 이용해서 4바이트를 전부 가리킬 수 있고, 2번째부터 4번째 바이트에는 순서대로 256^2, 256^3, 256^4의 값을 곱해줘서 전부 더하면 i의 값을 구할 수 있다.

1바이트씩 출력해보면, 왼쪽부터 낮은 데이터가 저장되고, 배열의 요소가 { 256001, 100000000,2147483647,3,4,5 } 이므로 다음과 같은 결과가 나온다.

 

3E801 = 256,001

5F5E100 = 100,000,000

7FFFFFFF = 2,147,483,647