Location | Tag | Media  ||  A | P

C/C++에서는 이것 많이 사용하였습니다.

편하니까

 

그런데, C#에서는 이런거 절대로 용납이 안되더군요 ㅎㄷㄷ

그리하여 동일한 방법으로 써 보도록 하지요...

 

1. typedef 형태의 structure

 

e.g.

C/C++

typedef struct _header_
{
    unsigned char id;
    unsigned char number;
    unsigned short packet_length;
    unsigned short data_length;
} HEADER;

 

이런식으로 표현하는데 C#에서는 어떻게 쓸까?

 

기본이 되는 namespace에서 멤버로 지정합니다.

private struct HEADER
        {
            public Byte id;
            public Byte number;
            public UInt16 packetLength;
            public UInt16 dataLength;
        };

이렇게 멤버 구조체가 선언이 되면 불러다가 쓰면 되지요.

임의의 함수내부에서 쓰일 수도 있고, 전역변수 형태로 쓰일 수도 있습니다.

 

new로서 본 구조체를 선언해 주어야지 쓸 수 있는데...

방법은

private HEADER hdr = new HEADER();

형태로 전역변수로 선언한 다음 필요한 곳에서 그 멤버 변수를 사용하면 되지요

 

hdr.id = 0xFF;
hdr.number = 0x00;
hdr.packetLength = 100;

hdr.dataLength = 100;

 

byte 는 암시적으로 type cating이 가능하므로, hdr.id = 255;라고 표현해도 hdr.id = 0xFF가 설정됩니다. 참고하세요...

 

2. #define 의 전처리기 구문

C#에서는 전처리기가 무시됩니다. 또한 에러가 나지요

그런데 이것을 쓰고 싶은데 어떻게 하면 될까요?

그래서... 찾아보았습니다.

 

e.g C/C++

#define START      0x00
#define END         0x10
#define LENGTH   4000

 

등의 형태로 숫자 혹은 Hex Value를 그대로 사용하는데요

그럼 이것을 똑같은 데이터형식으로 전역변수에 저장해 두고

 

C#

private Byte START = 0x00;
private Byte END = 0x10;
private UInt16 LENGTH = 500;

 

쓰일때는 이 변수의 값으로 변경하면 되지요.

요렇게...

 

hdr.id = START;

hdr.packetLeng = LENGTH;

 

Posted by Bestend
: