출처: http://soma0sd.tistory.com/37 [soma0sd] 이형배 스터디 :: 이형배 스터디

Union 공용체를 사용하여

HEX값을 float변수와 같은 메모리주소를 사용하게 하여

간편하게 출력을 해주었다.

 

Union을 몰랐을때는

비트연산,포인터등을 이용하여 어렵게 출력하려고 했다.

 

 

Union을 이욯하여 통신할떄 주고받고하는 값들을 편하게 변환해줄 수 있을 것 같다 

아래는 출력 화면.

 

 

#include 
#include 		
#include 

#pragma pack(push)
#pragma pack(1)
struct A{
	int Size;
	short Cmd;
	int Count;
};//크기 10Byte 맞춰주기위해 pragma pack()사용 
#pragma pack(pop)


void RecvStruct(char* StructToChar){
	int Size = ((A*)StructToChar)->Size;
	short Cmd = ((A*)StructToChar)->Cmd;
	int Count = ((A*)StructToChar)->Count;

	// 	memcpy((void*)Size, StructToChar, sizeof(Size));
	// 	memcpy((void*)Cmd, StructToChar + 4, sizeof(Cmd));
	// 	memcpy((void*)Count, StructToChar + 6, sizeof(Count));

	printf("%d\n", Size);
	printf("%d\n", Cmd);
	printf("%d\n", Count);
}

int main(void){

	A StructA;
	StructA.Size = 1;
	StructA.Cmd = 2;
	StructA.Count = 3;

	RecvStruct((char*)&StructA);

	system("pause");

}

char*형으로 구조체를 넘겨주고 다시 구조체로 형변환 하여 데이터를 받아본 모습이다.

 

구조체를 이용하여 데이터들을 BYTE단위로 넘겨주었다.

BYTE단위로 값들을 연결하기 귀찮거나 힘들때 구조체를 이용하여 넘겨주면 편한것 같다.

memcpy로는 다시 받을수 없는것같은데 추후 더 공부할계획

#include <stdio.h>
#include <stdlib.h>
 
struct A{
    int Size;
    short Cmd;
    int Count;
}; //크기 12Byte

#pragma pack(push)
#pragma pack(1)
struct B{
    int Size;
    short Cmd;
    int Count;
};//크기 10Byte
#pragma pack(pop)
int main(void){
printf("Struct A size : %d\n", sizeof(A));
printf("Struct B size : %d\n", sizeof(B));
}



구조체 A의 바이트를 10바이트로 맞춰야 하는데 sizeof(A)를 해보니 12Byte가 나와서


#pragma pack()을 이용하여 구조체를 1바이트씩 패킹하였다.


#pragema pack(1) 이부분에서 바이트수를 조절하는듯 하다


+ Recent posts