개발관련/C#

class || struct <=> byte Array 변환

Diademata 2017. 9. 24. 00:53
반응형

//Helper

public class ObjectConverter

    {

        public static int GetObjectBytesSize<T>()

        {

            return Marshal.SizeOf(default(T));

        }

        public static byte[] ObjectToBytes<T>(T obj)

        {

            int datasize = Marshal.SizeOf(obj);

            IntPtr buff = Marshal.AllocHGlobal(datasize);

            Marshal.StructureToPtr(obj, buff, true);

            byte[] data = new byte[datasize];

            Marshal.Copy(buff, data, 0, datasize);

            Marshal.FreeHGlobal(buff);

            return data;

        }

        public static T BytesToObject<T>(byte[] data)

        {

            IntPtr ptr = Marshal.AllocHGlobal(data.Length);

            Marshal.Copy(data, 0, ptr, data.Length);

            var obj = (T)Marshal.PtrToStructure(ptr, typeof(T));

            Marshal.FreeHGlobal(ptr);


            if (Marshal.SizeOf(obj) != data.Length)

            {

                return default(T);

            }

            return obj;

        }

    }



//example Class


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

    public class FileMeta

    {

        #region sigiture 4byte

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

        private char[] sigiture = new char[4];

        #endregion sigiture

}


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

    public struct SMMFData

    {

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]

        public string pdtCgr; //128

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]

        public string mchnId; //20

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]

        public string mchnTp; // 20

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]

        public string mchnVdr; //128

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]

        public string mchnNm; //128

    }


반응형

'개발관련 > C#' 카테고리의 다른 글

Dll 리소스 포함해서 exe 배포  (0) 2017.11.10
프로그래스바 더블 버퍼링  (0) 2017.11.09
ObjectSerialize  (0) 2017.08.10
Aes 암호화/복호화  (0) 2017.08.10
모든 타입 xmlWriter  (0) 2017.08.10