본문 바로가기
다물칸 주소복사
조회 수 197 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
구분 팁&트릭
출처 http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=17&MaeulNo=8&no=101083&ref=101076

TCP/IP 패킷 통신을 위해 구조체를 생성하고 보니 크기가 지멋대로 나오는 상황발생


구조체의 사이즈를 구하는 방법은 마샬을 사용하면 된다. 아래 Function에 보면 unsafe구문이 있는데 

프로젝트 속성에서 "안전하지 않는 코드 허용"을 체크 해주면 에러나지 않는다.


        public static byte[] StructToByte(object st)

        {

            byte[] buffer = new byte[Marshal.SizeOf(st)];

            unsafe

            {

                fixed (byte* fixed_buffer = buffer)

                {

                    Marshal.StructureToPtr(st, (IntPtr)fixed_buffer, false);

                }

            }

            return buffer;

        }



구조체 문위에 어트리뷰트 구문을 넣으면 4바이트로 정렬해서 사이즈 구하는 것을 막아준다. 


    [StructLayout(LayoutKind.Sequential, Pack=1)]

    public struct ITSPBHeader

    {

        public byte iMessageCategory;

        public Int16 iMessageType;

        public byte iServiceID;

        public uint iTime;

        public uint iMessageSize;

    }