본문 바로가기
배우는 과정/코딩공부

구조체 데이터를 읽어올 때

by c급선임 2024. 2. 7.
반응형

구조체로 만든 자료형을이용해 데이터를 읽고자 할때 병렬이동시 읽어오는 방법은 익히 알고 있듯 '. ' 방식이 있고 '->' 방식이 있다..

 

#include <stdio.h>

//#define  info	 ((struct st *)0x100)

unsigned char buf[] = {0x4d,0x4d,0x55,0x5f,0x45,0x6e,0x61,0x62,0x6c,0x65,0x44,0x43,0x61,0x63,0x68,0x65};

#define  info	 ((struct st *)buf)

struct st
{
	unsigned char x;
	unsigned char y;
	unsigned short length;
};

void main(void)
{
	int i;

	for(i=0; i<4; i++)
	{
		printf("0x%x, 0x%x, 0x%x\n", (info+i)->x, (info +i)->y, (info+i)->length); //주소를 사칙연산하여 병렬이동
		printf("0x%x, 0x%x, 0x%x\n", info[i].x, info[i].y, info[i].length); //주소를 []연산자를 이용해 병렬이동

	}
}

 

위 예시를 보면 결국 char로 읽으려던 것을 struct st로 캐스팅하여 4 byte씩 읽겠다는 것인데, 점을 쓰기 위해 info[0]을 쓰면 buf 원본의 첫 4 byte 자료가 구조체 변수로 잡히고 그것을 점을 이용해 내부를 살핀다. 이때 info[1]은 *(info+1)로 보면 된다.  

하지만 info라는 주소 자체를 사용하면 ->를 써준다.

반응형

댓글