c++ 서버, c# 클라 Unity 기준입니다.
C++
#pragma once
#pragma pack(push,1) // 1바이트 정렬
struct MyStruct
{
MyStruct()
{
m_AccountUniqueID = 0;
m_CharacterUniqueID = 0;
memset(m_sz, 0, sizeof(m_sz));
m_b = false;
}
char m_sz[128];
unsigned int m_un1;
unsigned int m_un2;
bool m_b;
};
#pragma pack(pop) // 1바이트 정렬끝?
대충 이런 구조체가 있다 치면 C# 으로 컨버팅 할때 이것저것 많이 해야된다;;;;;
C#
using System;
using System.Runtime.InteropServices;
// 1바이트 정렬... c#은 각 구조체, 클래스마다 다 해줘야된다
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class MyStruct // 여기선 class 선언 class와 struct 차이는 아래..
{
MyStruct()
{
m_AccountUniqueID = 0;
m_CharacterUniqueID = 0;
m_b = false;
}
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] // 배열의 크기를 정한다
public sbyte[] m_sz; // char는 2byte라서 1byte짜리 sbyte를 사용한다.
public uint m_un1;
public uint m_un2;
public byte m_b;
}
대충 위에 처럼 이런식이 되겠다..
위에 줄 부터 설명 하자면..
앞이 C++
sturct MyStruct --->
public class MyStruct
c++에서의 class 와 struct의 차이점은 선언 디폴트 값이 private냐 public 이냐 이거외의 차이점은 없다...
c#에서의 차이점은 나중에 값을 대입 했을때 깊은 복사( 구조체 ) 냐 얕은 복사( 클래스 ) 냐의 차이점이 있다...
여기선 클래스로 선언..
char m_sz[128] --- >
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public sbyte[] m_sz;
c++에서 char는 1byte다... -128 ~ 127
c#에서 char는 2byte다... U+0000 ~ U+ffff
//c#에서는 char 형이 2byte로 바뀌었습니다 유니코드 멀티바이트등을 다 포함하기 때문에.
우선 둘의 크기가 다르기 때문에 c++의 char 크기와 동일한 c#의 sbyte를 사용한다 ( 범위도 동일 )
unsigned int m_un1; --- >
public uint m_un1;
뭐 여기선 별 다를게 없다 unsigned int 대신 uint 라고 적었을뿐... 둘의 크기, 범위 동일하다.
bool m_b; --->
public byte m_b;
마지막으로 이게 좀 그런대... c++의 경우 bool은 1바이트다.... C# Unity의 경우 bool은 4바이트다..
true, false 만 넣는데 왜 그리 용량을 크게 잡은지는 모르겠는데..........
( 일반 c#의 경우 bool은 1바이트라고 한다.. 확인은 안해봤지만;; )
아무튼 bool을 그대로 사용할수 없기 때문에 c++에서 bool을 사용하지 않거나...
c#에서 byte형태로 사용하는게 편할듯 하다.. 굳이 byte가 아니더라도 1바이트 짜리 sbyte같은거라면 상관 없을듯하다.. 어짜피 바이트로 넣어주는거니까;;
이상 끝~
'개발언어 > C#' 카테고리의 다른 글
[C#] #region / #endregion 접기/펼치기 (0) | 2020.11.06 |
---|---|
[C#] C#과 C API의 상호운영 dll사용등 (0) | 2020.11.04 |
[c#] [StructLayout()]객체의 메모리 레이아웃에 대하여 (0) | 2020.11.04 |
[C#] [Flag] Enum Attribute는 무엇을 의미합니까? (0) | 2020.11.04 |
[C#] C# 코딩 표준 (0) | 2020.11.04 |